タグ

関数型に関するpoginのブックマーク (21)

  • オブジェクト指向 v.s. 関数型プログラミング

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

    オブジェクト指向 v.s. 関数型プログラミング
  • Rubyによる関数型プログラミング

    古き良き小学校の時代、この行には困惑させられたものだった。 魔術的な x が、加算されたのに等しいままでいる事に。 どういうわけか、プログラミングを始めると、それに構わなくなる。 「やれやれ、それは重大な事柄じゃないし、プログラミングとは現実のビジネス行為なんだから、 数学的な純粋さについてあら探しなんて必要無い (その議論なら、大学にいる狂った髭面野郎どもにさせておけばいい)」と思っていた。 けれども、ただ知らなかっただけで、我々が間違っていて高い代償を支払っていたのは 明らかである。 Wikipedia によれば、「関数型プログラミング(functional programming, FP)とは、 計算を数学的な関数の評価とみなし、 状態や可変データを避けるプログラミングパラダイム」である。 言い換えると、関数型プログラミングは、 副作用が無く変数の値を変化させないコードを推奨する。

  • Haskell でデータコンストラクタを置き換える高階関数 - reduce について誤解していたこと

    0. 目次: 1. 型を処理する高階関数を考える視点 2. リストのデータコンストラクタを置き換える関数 a. reduceList 関数の定義 b. reduceList で要素を足し上げる c. reduceList で同じ値を返す d. reduceList から map 関数を導く e. reduceList から filter 関数 f. 述語を満たす要素に、特定の関数を適用する g. reduceList からリストを結合する関数 h. reduceList でリストを逆順にする関数 i. Haskell の標準ライブラリにある foldr 3-1. 二分木でデータコンストラクタを置き換える関数 (1) – 左右の子が必ずある場合 a. reduceBinaryTree 関数の定義 b. reduceBinaryTree 関数から、map, filter 関数を導く 3-2.

  • Haskell Day2012 - 参照透過性とは何だったのか

    3. 自己紹介 • @ruicc • Ruichi Kousuke • 好きな作曲家:A. Bruckner • 好きなバイオリニスト:Hilary Hahn • 好きな言語:Haskell • 爆発すればいい言語:PHP

    Haskell Day2012 - 参照透過性とは何だったのか
  • C++ - C++ における関数スタイルのプログラミング

    図 6 を見ると、ラムダ式で変数と値を取得する方法を、プログラマが完全に制御できることがわかります。しかし、これによって値を使用するという考え方は保持できますが、複雑なデータ構造を値として効率よく操作することには役に立ちません。 不変データ型 不足しているのは、一部の関数型プログラミング言語にあるような効率的な不変データ構造です。このような言語では、不変データ構造は共通データを共有するため、非常に大きくなった場合でも、効率性を高めることができます。データを共有するデータ構造を C++ で作成するのは簡単です。データを動的に割り当てるだけで、各データ構造がそのデータへのポインターを保持します。残念ながら、共有変数の有効期間を管理するのが難しくなります (ガベージ コレクターが普及したのはこのためです)。さいわい、C++ 11 には、std::shared_ptr テンプレート クラスで共有変

    C++ - C++ における関数スタイルのプログラミング
  • 函数プログラミングの集い 2012 in Tokyo で発表してきました。 - 月の塵

    2012/09/01 にあった函数プログラミングの集い 2012 in Tokyo で発表してきました。「モナドをつくろう」というタイトルですが、タイトル詐欺で限定継続でモナドを表現する話です。当は、当日あった質問についてもまとめようと思ったのですが、なかなか文章がまとまらないので、とりあえずスライドと関連のありそうなリンクだけまとめておきます。 モナドをつくろう from dico_leque 関係ありそうな論文等Representing Monads: 今回の元ネタ。 call/cc + 書き換え可能な状態ひとつで shift / reset が表現できる、ということと、それを使ってモナドを表現すること。call/cc implements shift? A good question: call/cc + set! で shift / reset を実装した場合の問題点など限定継続

  • 8 ways to report errors in Haskell | Random Hacks

    Random code snippets, projects and musings about software from Eric Kidd, a developer and occasional entrepreneur. You're welcome to contact me! Mar 10, 2007 • by Eric Kidd Haskell is a marvellous language, but there are some things I don’t like about it. My least favorite: Haskell has no fewer than 8 different APIs for reporting errors. To make a bad situation worse, the choice of API varies betw

    pogin
    pogin 2012/05/18
    EitherとかMaybeの使い方がわかる。
  • Haskellで遊ぶ: Netsphere Laboratories

    (2005.7.18 新規作成, 2009.1 更新。) 関数型プログラミングのための言語 Haskell について。 [2022-09] 処理系が GHC --The Glasgow Haskell Compiler-- だけになってしまってずいぶん経つ。仕様も Haskell 2010 language 以降、纏められなくなってしまった。見通しはあまり明るくない。 Haskell とは (2008.11.7 この節を追加。) 関数型プログラミング 例えばC言語でもオブジェクト指向プログラミングができます (gtk+など) が、プログラミング言語の支援があったほうが自然にプログラミングできます。 Haskell あるいはほかの関数型プログラミング言語 (Clean, O'Caml, Scala, Erlang など)は、関数型プログラミングがしやすいようなプログラミング言語です。程度問題

  • わーい、モナドのインデックス付き圏が作れる - 檜山正幸のキマイラ飼育記 (はてなBlog)

    じっさまが「わーい」とか喜ぶのもどうかと思いますが、「作れたらいいな」と思っていたモナドのインデックス付き圏は作れそうです。わーい。 「なんだかわかんねーなー」と愚痴みたいなことをブログに書いて何の役に立つ?と思いきや、「またインデックス付き圏が出てきたけど、これはどうなっている?」にksさんからコメントをいただき、さらに次の論文もご紹介いただきました。 Descent for Monads http://www.tac.mta.ca/tac/volumes/16/24/16-24abs.html アブストラクトと「1. Introduction」の半分くらいを眺めて、第5章「5. Endofunctors and Monads」をザッとチェックしてみました。僕が「成り立っているとウレシイ」と期待していた結果は第5章の前半に書いてあります。ベースの圏に若干の条件は付きますが、圏と随伴対の圏

    わーい、モナドのインデックス付き圏が作れる - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Haskellの演算子について纏めてみた - 開発やプログラミングや家族や思考

    人が作ったHaskellのコードを読んでいると、記号の意味がわからなくて困ることが多々あったので纏めてみた。hrefでもGoogleでも検索できないしさ… Haskellの演算子で使える記号 !#$%&*+./<=>?@\^|-~ 及びUnicodeに含まれる記号(一覧が欲しい…けど√とか→とかもきっとそうだよね。) ただし「(),;[]`{}_:"'」は除く さらに、「:」で始まるのはデータコンストラクタで予約されているので演算子では使えない。 また、以下の記号列は予約されている 演算子 意味 .. リストの範囲指定。 : リストのcons。 :: 型指定 = 関数束縛。 \ ラムダ(無名関数)。 | パターンマッチのガード条件。data型enum定義。リスト内包表現。 <- リスト内包表現のジェネレータ。do記法での値束縛。 -> 関数の型定義。ラムダ(無名関数)定義。case式。 @

    Haskellの演算子について纏めてみた - 開発やプログラミングや家族や思考
  • 圏論デザインパターン

    要求開発アライアンスのセッション『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』で使用するスライドについて背景説明を行ってきました。 関数型言語の技術マップオブジェクト・モデリングのボトルネック代数的構造デザインパターン今回は背景説明第4弾で、「圏論デザインパターン」として用意した以下の図を説明します。 関数型言語の技術マップで説明したように、型クラスの導入によって代数的構造や圏論の理論をプログラミング言語で直接利用できるようになりました。 代数構造的デザインパターンは、基中の基概念であるので、モノイド以外のパターンもいずれ広く使われるようになることが予想されますが、今の所広く使われているのは圏論デザインパターンの方です。 代表的な圏論デザインパターンは以下のものです。 圏(category)対象と射(対象間の構造を保

    圏論デザインパターン
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

  • 檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」

    気まぐれと偶然となりゆきで、ここ2,3回はモナドを話題にしました。googleで「モナド」を引いてザッと眺めると、「モナドはむずかしいー」とか「モナドで挫折した」みたいな雰囲気が感じられて、説明芸人の血が少し騒ぎましたね。「なら、予備知識ゼロでモナドの説明をしてやろうじゃねーか」と。 タイトルはだいぶ煽っちゃった…… けど、ハッタリじゃないつもり…… けど、実際はどうかな? ※印刷のときはサイドバーが消えます。 内容: とりあえず、あたりさわりなくモナドの来歴を紹介する こんな課題を考えてみよう:副作用付き計算 カウントアップする関数達 カウントアップしたい意志を戻り値で伝える それでは、いったい誰がカウントアップをするのだ 関数の引数の型をCountup型にまで拡張する そして、これがモナドだ とりあえず、あたりさわりなくモナドの来歴を紹介する 今からここで説明する「モナド(monad)

    檜山正幸のキマイラ飼育記 - 世界で一番か二番くらいにやさしい「モナド入門」
  • 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
  • All About Monads モナドのすべて

    モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド Version 1.1.0 このチュートリアルは、モナドの概念とその関数プログラミングにおける応用に ついて、初中級の Haskell プログラマにわかりやすく、利用価値があるような 解説をすることを旨としています。読者は Haskell になれていることを前提と しますが、モナドに関する経験は要求していません。このチュートリアルは、多 くの題材をカバーしています。後半のセクションでは、前半の題材をよく理解し ていることを前提とします。順をおって、モナドプログラミングを例示するため のサンプルコードがたくさん用意されています。一読で、すべての題材を吸収し ようというのはお勧めできません。 このチュートリアルは 3 つの部分で構成されています。最初の部分は、 関数プログラミングにおけるモナドの基

  • モナドの定義とか - 檜山正幸のキマイラ飼育記 (はてなBlog)

    モナド関係で、KMさんと酒井さんにコメントをいただいて、僕もコメント欄に書き込みました。話が少しややこしくなったので、このエントリーで続きを。 コメント欄のやりとりで分かったことは、“Haskellのモナド”がモナドもどきではなくて、どうも、正真正銘の圏論的モナドであるらしいことです。であれば、Haskell知らずの僕が語ってもまー大丈夫かな、と。(メモ編に書くべき内容かもしれないけど。) Listは典型的モナドに思えないかも知れない 「Listモナドは典型的モナドだ」と僕は書いたのだけど、Haskellのヒトには違和感あるかもしれないですね -- Listはたいていのプログラミング言語でサポートされている平凡なデータ構造ですから。状態遷移とか入出力のような副作用を表現するモナドのほうが“モナドらしい”のでしょう、おそらく(憶測モード)。そうであってもなお、Listがやっぱり典型例なのは事

    モナドの定義とか - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 純粋関数型アルゴリズム入門

    6. 今日の話 このの解説 Purely Functional Data Structure Chris Okazaki リストとキューの話しかしません (それでも十分難しい) 7. 関数型言語の利点 • を読め! by C.Okazaki – J.Backus 1978 – J.Hughes 1989 – P.Hudak and M.P. Jones 1994 • それだとあんまりなので、適宜説明しま す 8. データ永続性(persistency) • 変数に割り当てられた値は一切変更され ることはない – 破壊的代入が行われない – いつ参照しても同じ値が返ってくる • 永続性により保守性が高まる 例: 1. aにある値を代入 2. bにある値を代入 3. a,bの値を表示 4. aとbにある操作をしてその結果をcに代入 5. a,bの値を表示 この間に値が変わらないのが、永続性

    純粋関数型アルゴリズム入門
  • なぜ関数プログラミングは重要か

    John Hughes, Institutionen för Datavetenskap, Chalmers Tekniska Högskola, 41296 Göteborg, SWEDEN. rjmh@cs.chalmers.se この日語訳は原著者の承諾を得て山下がここに公開するものです。 この訳文についての、御指摘などは山下伸夫(nobsun .at. sampou.org)までおねがい いたします。 翻訳最終更新日 : 2011-09-17 原文 "Why Functional Programming Matters" 日語訳PostScript この論文は1984年以来何年ものあいだChalmers大学のメモとして回覧された。 1989年と1990年に幾分か改訂をしたのが[Hug89]と [Hug90]である。この版はもとのChalmer大学のメモ のnroff原稿をもとに

  • 関数型プログラミングと代入 - あどけない話

    関数型プログラミングでは、よく「代入は使ってはならない」と言われます。関数型言語の一種である Emacs Lisp を生業とする僕は、この言葉に長年悩まされてきました。代入を使わないで実用的なプログラムを書くことは無理だからです。 もちろん、問題の内容が数学の関数に類似したものなら、代入も副作用もないプログラムを書くことは簡単です。階乗(factorial)のコードは、以下のように奇麗に実装できます。 (defun factorial(n) (if (= n 1) 1 (* n (factorial (1- n))))) しかし、こう書けることと、実際にこう書くかということとは別問題です。 Scheme のように末尾最適化を実装していて、末尾再帰をループに変換してくれるなら、上記を末尾再帰に変換したコードを書くでしょう。 しかし、Emacs Lisp には末尾最適化がありませんから、スタッ

    関数型プログラミングと代入 - あどけない話
  • 関数型言語の技術マップ

    要求開発アライアンスの定例会で『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』というタイトルでセッションを行うことになりました。 セッション時間が50分なので、かなり俯瞰した形での全体像の説明になりそうですが、関連する要素技術の数が多いのと、内容が込み入っているので、ブログで補足説明をすることにしました。 今回はその第一弾です。 「関数型言語の関連技術」として用意した以下の図を説明します。関数型プログラミング言語レベルの説明はScalaを対象にします。 Disclaimer2008年にScalaをはじめて足掛け4年、関数型プログラミングとは、どうも数学を使ってプログラミングしていくことらしい、ということが分かってきました。 ScalaをBetter Javaとして使うのであれば、そこまで頑張らなくてもよいのですが、関数型言

    関数型言語の技術マップ