関数型言語に必ずくっついてるこれ
いらんでしょ?匿名クラスで充分でしょ
探検
クロージャって何がいいの? [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/11/08(土) 13:11:47.84ID:6V2MLUHb315デフォルトの名無しさん
2014/12/20(土) 00:24:39.20ID:0cpPf2uS >>314
>SMLとOCamlの関係だからこういう似たような感じになるのかな?
SML も OCaml も同じML族の一員ですから、そんな感じになるのも不思議じゃないと思いますね
>それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
SML 以外の関数型言語は触った程度のレベルなので、以下はあくまで私見です:
・Lisp でも似た感じの再帰になる
ただし Lisp は TCO が保証されていないから、一般的な反復処理であれば
loop や while マクロ(または、その相当品)で手続き的なループで書く
・Scheme は TCO が言語仕様で保証されているので、普通は再帰で書く(>>302)
また継続(call/cc)があるので、loop や while の相当品を関数として自前で定義することも可能
・Haskell の場合、初めのうちは(ML や Scheme と同様に)再帰で書く
ただし Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を使う事を学ぶようになる
・関数プログラミングの楽しみ
http://www.amazon.co.jp//dp/4274068056
第3章「おりがみプログラミング」で詳しく解説されています
ということで Haskell の定義を参考にして、SML でも関数 unfoldl で再帰を抽象化したコードを書きました:
http://ideone.com/o5JM86
ここで unfold とは、よく知られている fold の双対な概念です
(fold は、Ruby だと inject、Lisp や JavaScript では reduce と呼ばれています)
fold xs が「あるリスト xs を畳んだ値 y」を返すのに対し、
unfold y は「ある値 y を広げたリスト xs」を返します
なお、「畳む/広げる」という言葉よりも「分解する(destruct)/組立てる(construct)」のほうが直感的かもしれません
(* 長いので、続く *)
>SMLとOCamlの関係だからこういう似たような感じになるのかな?
SML も OCaml も同じML族の一員ですから、そんな感じになるのも不思議じゃないと思いますね
>それともループを再帰に置き換えたらどうせどの言語でもこんな感じかな?
SML 以外の関数型言語は触った程度のレベルなので、以下はあくまで私見です:
・Lisp でも似た感じの再帰になる
ただし Lisp は TCO が保証されていないから、一般的な反復処理であれば
loop や while マクロ(または、その相当品)で手続き的なループで書く
・Scheme は TCO が言語仕様で保証されているので、普通は再帰で書く(>>302)
また継続(call/cc)があるので、loop や while の相当品を関数として自前で定義することも可能
・Haskell の場合、初めのうちは(ML や Scheme と同様に)再帰で書く
ただし Haskell だと文字列は文字型のリストであり、標準ライブラリの unfoldl を使う事を学ぶようになる
・関数プログラミングの楽しみ
http://www.amazon.co.jp//dp/4274068056
第3章「おりがみプログラミング」で詳しく解説されています
ということで Haskell の定義を参考にして、SML でも関数 unfoldl で再帰を抽象化したコードを書きました:
http://ideone.com/o5JM86
ここで unfold とは、よく知られている fold の双対な概念です
(fold は、Ruby だと inject、Lisp や JavaScript では reduce と呼ばれています)
fold xs が「あるリスト xs を畳んだ値 y」を返すのに対し、
unfold y は「ある値 y を広げたリスト xs」を返します
なお、「畳む/広げる」という言葉よりも「分解する(destruct)/組立てる(construct)」のほうが直感的かもしれません
(* 長いので、続く *)
316デフォルトの名無しさん
2014/12/20(土) 00:32:09.09ID:0cpPf2uS (* >>315 の続き *)
なお、map や filter といった高階関数を一般化したものが fold であることは
よく知られていますが、ここでリストを代数(群)に見立てた圏論の視点で再構成すると:
・fold を(更に)一般化したものがカタモルフィズム(catamorphism)である
・unfold を(更に)一般化したものがアナモルフィズム(anamorphism)である
という、本質的な形でリスト処理を定義できるようになります
(モナドとは関連しない)圏論を応用したプログラミングについては、以下のプレゼンがお薦めです
・Introduction to Categorical Programming (Revised)
http://www.slideshare.net/sakai/introduction-to-categorical-programming-revised
p.18 の図式を使った「圏論でのリスト型の定義」が直感的です
詳細については、以下の記事で紹介されている論文(英語)が分かりやすかったです
・Haskellと圏論を学んできて、そのまとめとしてちょうどよい論文を見つけたのでメモ。
https://plus.google.com/+OsamuNagano/posts/7cPfAQ145Yi
>それにしても関数型言語なるものを知るにつれて思うのは、....
ML や Haskell は静的型付けによる安全性と高速化を主眼に設計された言語ですから、
Ruby や Python といったスクリプト言語の置き換えには成り得ないと考えます
これに関しては、以前に別スレ「LLにおける関数型プログラミング」で説明しています
http://peace.2ch.net/test/read.cgi/tech/1345123070/28
また ML や Haskell の強力な型推論は、データ型に関する矛盾(=バグ)が存在しないことを(実行の前に)証明しますが、
動かしては書き直す(いわゆるトライ&エラー)が一般的なスクリプトプログラミングには不向きだと考えます
(* これで終わり *)
なお、map や filter といった高階関数を一般化したものが fold であることは
よく知られていますが、ここでリストを代数(群)に見立てた圏論の視点で再構成すると:
・fold を(更に)一般化したものがカタモルフィズム(catamorphism)である
・unfold を(更に)一般化したものがアナモルフィズム(anamorphism)である
という、本質的な形でリスト処理を定義できるようになります
(モナドとは関連しない)圏論を応用したプログラミングについては、以下のプレゼンがお薦めです
・Introduction to Categorical Programming (Revised)
http://www.slideshare.net/sakai/introduction-to-categorical-programming-revised
p.18 の図式を使った「圏論でのリスト型の定義」が直感的です
詳細については、以下の記事で紹介されている論文(英語)が分かりやすかったです
・Haskellと圏論を学んできて、そのまとめとしてちょうどよい論文を見つけたのでメモ。
https://plus.google.com/+OsamuNagano/posts/7cPfAQ145Yi
>それにしても関数型言語なるものを知るにつれて思うのは、....
ML や Haskell は静的型付けによる安全性と高速化を主眼に設計された言語ですから、
Ruby や Python といったスクリプト言語の置き換えには成り得ないと考えます
これに関しては、以前に別スレ「LLにおける関数型プログラミング」で説明しています
http://peace.2ch.net/test/read.cgi/tech/1345123070/28
また ML や Haskell の強力な型推論は、データ型に関する矛盾(=バグ)が存在しないことを(実行の前に)証明しますが、
動かしては書き直す(いわゆるトライ&エラー)が一般的なスクリプトプログラミングには不向きだと考えます
(* これで終わり *)
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 日本政府に [おっさん友の会★]
- 中国側が首相答弁の撤回要求、日本側拒否★6 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★3 [蚤の市★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★5 [蚤の市★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 逆にお前が統一ネトウヨだったら質問した野党が悪い以外に高市早苗を擁護するパッケージ作れるの?無理だろ? [517791167]
- 【速報】中国、水産物輸入停止 [527893826]
- 【緊急】高市早苗 月内辞任か [695089791]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- トランプさん、高市早苗を切り捨てる 「あ、うちは台湾有事発言に無関係なんで😅」 [175344491]
- 【高市悲報】官房長官「局長がペコペコしてる画像が拡散しているが日本は承知しとらん😡中国に申し入れした!」🤔 [359965264]
