1 名前:デフォルトの名無しさん [2014/08/10(日) 21:27:16.56 ID:x7G32Sd0] 計算機科学の基礎は集合論であるという。 ならば、集合論に基づいた言語を作れば美しい言語になるのでは? そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
110 名前:デフォルトの名無しさん [2014/08/17(日) 09:41:10.85 ID:ruDVRpF3] 集合が{○、●、◎、□、■}とすると、 圏は{→(1)、→(2)、→(3)、→(4)、→(5)}>
111 名前:デフォルトの名無しさん [2014/08/17(日) 09:51:19.75 ID:ruDVRpF3] 途中で送信した。 (ある条件をみたす)全ての集合に対して、(ある条件をみたす)全ての集合の写像の集まりが圏。 圏論は、集合間の写像に注目したもの。 厳密なことは知らないが、どんな集合も圏として扱えるはずだろう。 集合{○、●、◎、□、■}に対して、圏{○→○、●→●、◎→◎、□→□、■→■}、(f(x)=xとなる写像)が作れる。
112 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 09:52:50.76 ID:wbAX39n3] >>110 →の意味がわからないw あと最後の>は必要なの?
113 名前:1 mailto:sage [2014/08/17(日) 09:53:56.42 ID:wbAX39n3] うおリロードしてなかった。
114 名前:デフォルトの名無しさん [2014/08/17(日) 10:02:50.89 ID:ruDVRpF3] 圏の主人公って「対象」なのかな?「射」なのかな? | TETRA'S MATH 「しりとりの圏」を圏とみなそうとするとき、まず、1字1字があって、 artet-math.img.jugem.jp/20101201_1468744.jpg それを始域、終域とする文字列を考えるのか。 artet-math.img.jugem.jp/20101201_1468743.jpg それとも、まず文字列ありきで、 artet-math.img.jugem.jp/20101201_1468745.jpg 始域、終域の一致でそれらの関係をひとまとまりのものとして捉えるのか… artet-math.img.jugem.jp/20101201_1468746.jpg どっちのイメージが圏の本質に近いのだろう? で、検索していたら、檜山さんの有限集合と写像の圏もJavaScriptで書いてみた、遊んでみてねにて、「圏の主役は射です。」と書いてあるのを発見。なるほど。 math.artet.net/?eid=1306322
115 名前:1 mailto:sage [2014/08/17(日) 10:17:17.51 ID:wbAX39n3] TODOが一気にふえたな。 とりあえず、Ocamlの本買ってきます。 圏論を理解できるようになるのは相当先かな〜。
116 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 10:34:34.27 ID:kLc8LA2s] >>1 はやりたいことが沢山あって圧倒される段階か。その後何年かして夢見た事はすべてやり尽くした段階になる。 能力が足りないとそうなるまえに死んでしまうがね。
117 名前:デフォルトの名無しさん [2014/08/17(日) 10:36:45.62 ID:ruDVRpF3] Ocamlは副作用があって純粋な関数型でない。副作用ありでいいならJavascriptも関数型言語でJavascriptで関数型の勉強可能。 純粋関数型プログラミングとは 関数が純粋であるというのは、副作用がないということである。副作用とは、関数が、内部で、なんらかの状態を隠しもつことをいう。 OCamlのようなML由来の言語は"ほぼ純粋"である。副作用を、参照や配列の形で使えるけども、大抵は、書いたコードは純粋関数型に落ち着くことが多い。 Haskellもまた、関数型言語で、純粋関数型だ。OCamlは、より実用的といえる。純粋でない関数もときには便利だからだ。 ocaml.org/learn/tutorials/functional_programming.ja.html JavaScriptで学ぶ関数型プログラミング hamasyou.com/blog/2014/02/21/functional-javascript/ JavaScript はプロトタイプベースのオブジェクト指向言語ですが、関数型言語の機能も備えています。 www.geocities.jp/m_hiroi/light/js03.html JavaScript - Javascrptで関数型プログラミングの入門 - Qiita qiita.com/takeharu/items/cf98d352ff574c5ac536 JavaScriptは関数型言語の特徴を取り入れていると思いますが、純粋な関数型言語ではありません。しかし今、そしてこれからのトレンドは関数型言語と言われています。 そこでJavaScriptでより関数型言語的なプログラミングを可能にするfn.jsを使ってみましょう。 www.moongift.jp/2014/02/fn-js-javascript%E3%82%92%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E%E3%81%AE%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%A7%E6%9B%B8%E3%81%8F%EF%BC%81/ CoffeeScript と Node.js による関数型の JavaScript www.ibm.com/developerworks/jp/java/library/j-coffeescript/ Functional JavaScript https://gist.github.com/ympbyc/5564146
118 名前:デフォルトの名無しさん [2014/08/17(日) 10:45:48.55 ID:ruDVRpF3] この記事では、クイックソート・アルゴリズムの実装について、 様々な言語で書かれた関数型プログラミングのコードを紹介しています なお、この記事の内容は、 2ちゃんねる掲示板 のプログラム板にあるスレッド 【PHP,Python】スクリプト, バトルロワイヤル36【Perl,Ruby】 で行われた議論を整理、加筆したものです。 関数型言語が関数型プログラミングを何の苦もなく実践できるのは、当たり前の話です。 Haskell quicksort [] = [] quicksort (pivot:xs) = quicksort littles ++ pivot:(quicksort bigs) where f x (ls, bs) = if x < pivot then (x:ls, bs) else (ls, x:bs) (littles, bigs) = foldr f ([], []) xs この節で取り上げる Ruby, JavaScript, Python はどれも関数型言語には分類されていませんが、関数型の特性を取り入れていると言われています。 それでは、これら言語の関数型プログラミング・スタイルを見ていくことにしましょう。 JavaScript function quicksort(xs) { function f(xs) { var pivot = xs[0]; function g(pair, x) { var ls = pair[0], bs = pair[1] return x < pivot ? [ls.concat([x]), bs] : [ls, bs.concat([x])]; } var pair = xs.slice(1).reduce(g, [[], []]); var littles = pair[0], bigs = pair[1]; return [].concat( quicksort(littles), [pivot], quicksort(bigs) ); } return xs.length <= 1 ? xs : f(xs); } www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
119 名前:デフォルトの名無しさん [2014/08/17(日) 10:51:34.94 ID:ruDVRpF3] こっちのクイックソートのほうが短くわかりやすかった。 クイックソート - NullPointer's Blog Erlangで書くと… quicksort([]) -> []; quicksort([Head|Tail]) -> quicksort([X || X <- Tail, X < Head ]) ++ [Head] ++ quicksort([X || X <- Tail, X >= Head]). 小さいのを左に集めて、大きいのを右に集めて、繰り返し…、アルゴリズムの説明そのままのコードになる。 簡単すぎ。アルゴリズムを理解するという目的であれば、関数型のコードの方が10000倍理解しやすい。 関数型っぽい書き方は、最近のJavaScriptならばサクッと書けますが… function quickSort(array) { if (array.length <= 1) return array; var pivot = array.pop(); var lt = array.filter(function(a){ return a < pivot }); var ge = array.filter(function(a){ return a >= pivot }); return quickSort(lt).concat([pivot]).concat(quickSort(ge)) } paulownia.hatenablog.com/entry/20111204/1323015703
120 名前:1 mailto:sage [2014/08/17(日) 15:08:45.66 ID:wbAX39n3] 本屋めぐってきたけどOcamlの本なかったわー 廃れてしまった言語なん? しかたないからwebで情報探すか。
121 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 15:31:49.05 ID:8WbwPRMF] ググれば数秒でみつかるのに。 caml.inria.fr/resources/index.en.html
122 名前:デフォルトの名無しさん mailto:sage [2014/08/17(日) 16:03:30.63 ID:PGXi6tC2] >>109 > うーん。そうなんですか。でもそれだとこのスレが終わってしまうw いいことじゃん。 続きはブログでやってくれ。