タグ

functionalに関するakishin999のブックマーク (85)

  • なぜクロージャ(Closure)と言うのか? - Qiita

    クロージャはわかりづらい。 なんでかと言うと、以下の2つです。 名前 定義がよくわからない Wikipediaさんなんかで調べると。 クロージャ(クロージャー、英: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。 関数閉包!! 関数閉包、意味不明すぎる。なんかこの字面が意味分からなくしようとしているような気配すら感じる。(とはいえ、じゃあどんな名前が良いかと言えば、わかりませんし。それに一般的には「クロージャ」で通っていますから、別にいいのですが。) 関数ヘイホウってなに?初めてクロージャを学ぶような僕は、もう、むしろ笑えます。ちなみに、その先の**「関数オブジェクトの一種」とか「ラムダ式」**なんかも知りません。 けど、JavaScriptのクロージャの事例は、とても分かりやすい。 関数の中に関数がありま

    なぜクロージャ(Closure)と言うのか? - Qiita
  • n人目の所業だがRubyでMaybe monad (Option monad) を作った - c4se記:さっちゃんですよ☆

    n人目の所業だがRubyでMaybe monad (Option monad) を作った。当たり前だが実用ではない (要らない)。 List monadを作るのは辛さうと云ふ丈の理由だ。HaskellとScalaを参照した。 # coding=utf-8 # license: Public Domain # Rubyでcurry化しない関数合成 http://c4se.hatenablog.com/entry/2014/07/27/140057 def compose *fs; proc{|*args| fs.inject(args){|args, f| f.call *args } }; end class Maybe include Comparable include Enumerable # <$> # @param [Proc<s,t>] f # @param [Maybe<s>

    n人目の所業だがRubyでMaybe monad (Option monad) を作った - c4se記:さっちゃんですよ☆
  • 「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い - Qiita

    はじめに 関数型プログラミングとオブジェクト指向の抜き差しならない関係について整理して考えるという記事がkenokabeさんという方が挙げていて、拙著の 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡について言及があったので、補考として挙げておく。 暗黙的状態と明示的状態 これまで、関数を「わかりやすくきれいに書く方法」とオブジェクト指向が「どのようにして生まれてきたか」について話してきた。 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 一見、それぞれ関係ないように思うかもしれないが、実は大きなテーマでつながっている。 『それは「状態」をどのように取り扱い単純化するか。』ということだ。そして、これがいわゆる関数型プログラミングとオブジェクト指

    「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い - Qiita
  • GitHub - egison/egison-ruby: A Ruby gem for non-linear pattern-matching with backtracking

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - egison/egison-ruby: A Ruby gem for non-linear pattern-matching with backtracking
  • RubyにHaskellよりも強力なパターンマッチを実装した - Qiita

    require 'egison' include Egison match_all(object) do with(pattern) do ... end end match(object) do with(pattern) do ... end with(pattern) do ... end ... end パターンマッチに成功すると、withに渡されたブロックが実行され、その結果が返されます。 このライブラリのパターンマッチでは、パターンマッチの結果が複数あるということがあります。 match_all構文はそのすべてのパターンマッチの結果それぞれについてwithに渡されたブロックを実行し、すべての結果をまとめた配列を返します。 match_all構文は1つのwith節を取ります。 一方、matchは複数のwith節を取ります。 先頭のwith節のパターンから順番にパターンマッチに成功

    RubyにHaskellよりも強力なパターンマッチを実装した - Qiita
  • 関数型言語を学ぶことは実務でどう役に立ったか - Rejasupoem

    関数型LT大会で「実社会の問題を解決する関数型言語」というタイトルで発表しました。 というのも、会社で「すごいHaskellたのしく学ぼう!」の輪読会をしていて、最初こそ10人以上の人が参加していたのだけど、章が進むごとにどんどん人が離脱していって、主催者としてはなんとか完走したいという思いがあったので、調べたのですが、 ヒアリングから、この二つの線がクロスしたときに、人は離脱するという知見が得られました。 ということで、Haskellに対して実用性を見出したいと思いながら半年を過ごしたのですが、実用的 = 仕事で使うということであれば、今の現場でHaskellに移行するのは現実的ではありません。 でも、Haskellには関数型言語のエッセンスが詰まっていて学びが多かったと思っていて、直接的には使っていないけど、概念として役立つことがあると思ったので、それを伝えるために今回文章に起こしまし

  • Rubyの手続き型と関数型の側面 - Qiita

    Rubyは手続き型の言語であるが、LispやSmalltalkの影響も受けているため関数型言語の側面も持つ。 Wikipediaのアクセス解析プログラムを例に、両者の違いを比べてみる。元の手続き型のコードは、いがいがさん作のRuby講義資料から。 Ruby 講義 第6回 Wikipediaアクセス解析 Ruby 講義 第7回 Wikipediaアクセス解析 アクセス解析のプログラムは以下の処理を実施している。 CSV形式のログ(ページ名とアクセス数が記録されている)を読み込む jaで始まる行のみを対象にする ログの1行からページ名とアクセス数を抽出 アクセス数が多い順に並び替え トップ20行を表示 require "cgi" filename = "20120301-000000-ja.txt" file = File.open(filename, "r:UTF-8") list = []

    Rubyの手続き型と関数型の側面 - Qiita
  • foldlを直す - 純粋関数空間

    http://www.well-typed.com/blog/90/ foldlに関するこの記事(英文)が面白かったので、勝手翻訳しました。 foldlなんとかなるといいですね。 foldlを直す foldl 関数は壊れている。壊れているとみんなが知っている。 四半世紀近く壊れたままだ。ついにこれを修正する時が来た! 今日、私はPrelude.foldlをData.List.foldl'として知られる実装で再定義することを提案する。 foldlは壊れている! 既にご存知だとは思うが、念のため… Haskellerが必ずfoldlではなく、foldrやfoldl'を使うように勧めてくることにお気づきだろうか? 例えばReal World Haskellでは次のように言っている。 `foldl`のサンクの挙動のため、実アプリではこの関数を使わないようにするのが望ましい。 特に問題がない場合でも

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • プログラム中級者が感じる関数型の違和感

    なんだか話題になってるから書く。 やっと初心者を脱して中級者になりかけてるプログラミング学習者が関数型言語に何を感じているかを書こうと思う。 1 圏論とかいらないんじゃないの?Haskellが短いコードでプログラムを書けるというのは分かる。 forループをmapやfoldで抽象化する利点も分かる。 それでやりたい処理のほぼ全てがまかなえるということも実感している。 副作用のない小さな関数を合成して大きな関数を作る利点も分かる。 再利用性も上がるし、どこからどう影響を受けているかが簡単に分かるからバグも出にくい。 ただ、Haskellの基礎になってる圏論が何の役に立つのかは、まったく分からない。 むしろ邪魔なんじゃないかと思う。 ファンクターやモナドの概念が圏論で扱われているのは分かるけど、圏論なんて名前だけ知ってればコードを書くのに不都合はないだろう。 圏論が必要なのは、Haskellを設

    プログラム中級者が感じる関数型の違和感
  • オブジェクト指向 v.s. 関数型プログラミング

    近年、関数型プログラミングの重要性はいろんなところで叫ばれています。 Javaの最新バージョンに関数型プログラミングに関する新機能が加わりました。 Rubyも昨今、関数型プログラミングへのサポートが手厚くなってきています。 プログラミングの教科書の大手、オライリー社から、Javascriptで関数型プログラミングを行うための解説書が発行されました。 関数型プログラミングへの注目度は高まってきています。 おそらく、みなさんは既にオブジェクト指向が何か、を知っています。 でも関数型プログラミングとは何か、胸を張って語れる人は、周りに見当たらないかと思います。 実際、オブジェクト指向によってプログラミングする方法は、わかりやすい解説があちこちにある一方で、 関数型プログラミングとは何か、何が良いのか、ということについての、よいまとめは見つけることはできませんでした。 この記事を読む方の中で、「関

    オブジェクト指向 v.s. 関数型プログラミング
  • オブジェクト指向設計の原則と関数型プログラミング

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    オブジェクト指向設計の原則と関数型プログラミング
  • 関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した - 石橋秀仁(zerobase)書き散らす

    最近、ScalaとSmalltalkを触っていて思ったこと。 一見すると、関数型は「データ」より「処理」を重視しているように見える。 関数型プログラミングパラダイムそのものは「副作用のない関数」の合成による演算の恩恵を最大限に享受するパラダイムだ。副作用がないので並列演算の高速化に向いている。 昨今のマルチコア化やクラスタ化のメリットを最大に活かすには関数型プログラミングパラダイムの導入が鍵だろう。プロセッサ単体での性能向上が頭打ちになってきたのだから、並列演算に対応したプログラミング方式へのシフトは不可避だろう(ただし高性能が要求されない分野は除く)。 関数型プログラミングパラダイムは、データよりも処理を重視したパラダイムのように見える。 一見すると、オブジェクト指向は「処理」より「データ」を重視しているように見える。 オブジェクト指向プログラミングパライダムは、(Smalltalk的に

    関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した - 石橋秀仁(zerobase)書き散らす
  • オブジェクトの世界と関数の世界

    3月19日(月)に要求開発アライアンスのセッション『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』を行いましたが、説明を端折ったところを中心にスライドの回顧をしています。 「オブジェクトの世界と関数の世界」として用意した以下のスライドを説明します。 このスライドは元々、以下の2つの情報を表現するために用意していたのですが、いろいろ書き込んでいくうちに、OFADでのモデル変換の流れの側面が大きくなってしまいました。 オブジェクトの世界と関数の世界は併存するのが必然 アプリケーション・モデルの実装側はできるだけ関数型にしていく このため、同じような情報を持つスライドをセッションでは2つ省略しましたが、逆に、このスライドでは、「OFADでのモデル変換の流れ」の説明になってしまい、肝心なことの説明ができなくなってしまったので、この

    オブジェクトの世界と関数の世界
  • プログラミング言語Frege(フレーゲ)を紹介します - uehaj's blog

    これはマイナー言語 Advent Calendar 2013の21日目の記事です。 Frege(フレーゲ*1 )を紹介します。 Fregeは、Java VM上で動作するHaskell風の言語です。以下のような特徴を持っています。 純関数型言語 非正格評価(いわゆる遅延評価) Hindley-Milner型推論に基づく静的型言語 これらの特徴は、Haskellと共通するものであり、構文も基的なところについてはHaskellとだいたい同じか似ているかもしくはサブセットです。標準関数やデータ型やモジュールについても、Haskell 2010からたくさん引っぱってきているそうです。 しかしながら、Fregeはその目標において、Haskellとの完全な互換性を達成しようとはしていません。実際かなり違っています。特にJava VM上で有用であることに重点が置かれており、プリミティブ型はJavaのもの

  • 関数型プログラミング言語のまとめ - ワザノバ | wazanova.jp

    http://funceng.com/2013/11/03/review-of-functional-languages/ Kevin Buellがブログの一連のエントリーで関数型プログラミング言語の概要をまとめています。 1) Haskell ラテン語がわかる人には親しみやすい。 [Background] 遅延評価の研究成果をとりまとめる委員会が1990年にHaskell 1.0の仕様をつくった。コンパイラはGlasgow Haskell Compiler (GHC)が最も有名。Haskellに関する研究はMicrosoft Researchで盛ん。.NETのための関数型言語であるF#もMicrosoft Researchの成果であるが、別の研究者グループの手により後年世にでてきた。 その他の項目は原文参照ください。 [Comparative Description] [Syntax H

  • [ruby] Rubyで関数合成できるLambdaDriverがかっこよすぎる - Sudix's Blog

    Rubyで関数合成できると便利なのになぁという場面に出くわして、以前に見て知っていたけど試したことはなかったLambdaDriverを触ってみた。 ( ꒪⌓꒪) ゆるよろ日記 – Rubyで関数合成とかしたいので lambda_driver.gem というのを作った install gem install lambda_driver サンプル 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 require 'lambda_driver' add_hoge = lambda{|x| x + "hoge"} add_fuga = lambda{|x| x + "fuga"} # >>で合成 add_hoge_fuga = add_hoge >> add_fuga # < で実行(callの別名) add_hoge_fuga < "piyo" => "piyohogefu

  • LambdaDriver by yuroyoro

    # [:foo, :bar, :baz].map{|s| s.to_s }.map{|s| s.upcase } # [:foo, :bar, :baz].map(&:to_s).map(&:upcase) [:foo, :bar, :baz].map(&:to_s >> :upcase ) # => ["FOO", "BAR", "BAZ"] # [:foo, :hoge, :bar, :fuga].select{|s| s.to_s.length > 3} # => [:hoge, :fuga] [:foo, :hoge, :bar, :fuga].select(&:to_s >> :length >> 3._(:<)) # => [:hoge, :fuga] project page rubygems.org Build status Installation Add this li

  • Rubyで関数合成とかしたいので lambda_driver.gem というのを作った - ( ꒪⌓꒪) ゆるよろ日記

    LambdaDriver by yuroyoro Rubyで、Procやlambdaで関数合成できるようにしたかったので、lambda_driver.gemというのを作った。 内容的にはこの辺で書いたヤツをgemにした感じ。 「関数型Ruby」という病(2) - 関数合成 Proc#compose - ( ꒪⌓꒪) ゆるよろ日記 「関数型Ruby」という病(3) - カリー化(Proc#curry, Proc#flip) - ( ꒪⌓꒪) ゆるよろ日記 こんな風に、カッコよくコードが書ける。 require 'lambda_driver' # [:foo, :bar, :baz].map{|s| s.to_s }.map{|s| s.upcase } # [:foo, :bar, :baz].map(&:to_s).map(&:upcase) [:foo, :bar, :baz].map(

    Rubyで関数合成とかしたいので lambda_driver.gem というのを作った - ( ꒪⌓꒪) ゆるよろ日記
  • クロージャやラムダ式を理解していない組込エンジニアが関数型言語を理解するチャレンジングな4冊(+6冊+α) - ひつじのにっき

    手続き型言語を主なフィールドとして頑張ってきた組み込みエンジニアが関数型言語に興味を持ったので相談したら以下の4冊(+6冊)のを薦められました。順次読んでいきます。多分にチョイスが偏ってます(ので、随時補正を取り込んで下に追記してます。初出は6冊だったのですが現時点で10冊。お好みでどうぞ。一部はWebで公開されていると教えていただいたのでリンクを足しておきました。一夜明けて、さらに参考文献が沢山きたので追記しました)。 ただ全てのを連続的に読むことでタイトルのように関数型言語がわかった!みたいな意味を成すかはわかりません(しばらくまって結果を見たほうが参考になるはずです)。1冊か章の区切りかでまとめていくので一緒に読んでくれたりお勧めのを教えてくれたり、誤った理解をなおしてくれると更に喜びます。とりあえず全部買ったので今からスタートです (追記:関数型言語、という入り口から入るなら

    クロージャやラムダ式を理解していない組込エンジニアが関数型言語を理解するチャレンジングな4冊(+6冊+α) - ひつじのにっき