集合論に基づいた言語を作りたい

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2014/08/10(日) 21:27:16.56ID:x7G32Sd0
計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
2014/08/11(月) 21:11:11.02ID:GsgTpDMz
ありきたりな発想だから既存のものの問題点を知らないうちは
何を作っても新しいものは生まれない。
2014/08/11(月) 21:18:09.44ID:Z+2tOK2m
実数を集合であらわす原理を明らかにしないと意味ない。
デデキントカットで集合をもって実数を表せるけど、そんなの計算機でどうあらわすかね
491
垢版 |
2014/08/11(月) 21:31:46.30ID:7qJjistY
>>47
それは確かにそうだと思う。
>>48
意味不明。計算機で本当の実数は扱えないでしょ。
だからみんな浮動少数点とか使ってるわけで。
2014/08/11(月) 21:33:16.67ID:GsgTpDMz
某スレでカルネージハートみたいなビジュアル言語を作りたいとか言ってた奴の方がなんぼか発想力がある。(5段階で3)
だが論理性や実装力は致命的に皆無にみえた。
俺はそれをどう構成すればいいか知っているが教える義理はない。
2014/08/11(月) 21:47:28.34ID:BJB2O+7J
>>45-46を見るとこりゃダメだってすぐわかる。
2014/08/11(月) 22:10:25.37ID:Z+2tOK2m
つまらんやつだな
531
垢版 |
2014/08/11(月) 22:38:00.43ID:7qJjistY
>>52
なにを期待してたんだ。。。
2014/08/11(月) 23:35:56.32ID:Mn3XtQiS
>>50
似た様なゲームで最近はACVDのUNACってのもある
ツリー構造と繰り返しで関数を嵌め込んで数値パラメータを関数に設定するだけの物だが

>>53
紫本を読もう
2014/08/12(火) 12:26:24.53ID:oqHJt0pq
不勉強な上に
他人を当てにしてのスレ立て
万死に値する
2014/08/12(火) 12:46:04.68ID:+sDF17YZ
>>55
己の未熟を>>1は告白してるからその言いようは酷いんじゃ無いのかな?
2014/08/12(火) 13:45:33.28ID:KAheOZts
>>1は偉いよ
日本では
>>51とか
>>55とか
いかにも世界に悪評高い「考えそのものを考え出していくことの意義」がわからん馬鹿が多いけどな
ま気にせずがんばれ
2014/08/12(火) 14:37:19.20ID:rgzvfb+p
いや、1が無知すぎて話にならないのが問題なんじゃ・・・
何度もネタ振りしてるってのに
591
垢版 |
2014/08/12(火) 15:09:14.84ID:ey9Yf386
そもそも集合論に基づいた言語を作りたいってのは
数学のテクニックをプログラミングに持ち込めるかなと思ったからだけど、
案外、そうでもないのかもw
根底から意義が揺らいできたw
2014/08/12(火) 15:38:39.73ID:rgzvfb+p
釣りか?釣りだよな
マジで言ってるのなら、計算機科学史を一からやり直してこい!
2014/08/12(火) 16:15:20.95ID:+sDF17YZ
>>59
ちょ、>>56で擁護した事根底から覆すかなもう
621
垢版 |
2014/08/12(火) 18:29:00.33ID:ey9Yf386
教科書に載ってるような問題を教科書に載ってる定義のまま
インプリメントしたら面白いかなーと思ったんだけど。
集合をプリミティブ型にしてもインプリメントが
劇的に変わることはないかなーと思い始めた。
2014/08/12(火) 20:06:53.08ID:8OBRChie
Coqでいいじゃん。
2014/08/12(火) 20:28:06.45ID:6TgmEYvj
二進数で自然に表現できるものを、わざわざペアノ算術から自然数の定義を頑張る意味がわからない
651
垢版 |
2014/08/12(火) 20:46:58.68ID:ey9Yf386
Coqって知らんなあ
証明支援言語?
それそんなにいいの?
661
垢版 |
2014/08/12(火) 20:51:54.62ID:ey9Yf386
>>64
それは俺もちょっと思ったw
まあ、全てを集合で表そうとおもったらそうなるというか。
2014/08/12(火) 21:18:32.69ID:6TgmEYvj
>>66
二進数は元が含まれるか否かの2択で決まるから、十分集合と二値論理に依っているがな
2014/08/13(水) 00:57:44.46ID:vN2Jb3VO
SQLでいいじゃないか
691
垢版 |
2014/08/13(水) 09:08:18.79ID:wV8mf1Ia
SQLもそんなに詳しいわけじゃないが
SQLは違うくね?
2014/08/13(水) 09:44:32.05ID:EX+RHsS4
ggrks
2014/08/13(水) 11:13:17.12ID:dxftsD0h
>>1の言う集合論的思想って何よ。

SQLが違うってんなら自分の思想を述べてみろよ。
2014/08/13(水) 11:15:46.15ID:dxftsD0h
「計算機なら集合の操作がやりやすいはず!」なんて話は別にどこにもないからな
計算機科学って「集合論的な操作をいかに計算機上で効率よく実装するか」ってものだから
そもそも >>1 の主張がおかしいんだよ。
731
垢版 |
2014/08/13(水) 12:28:01.11ID:wV8mf1Ia
>>71
計算機科学の基礎になる集合論ではSQL見たいなデータの定義しないだろ。

>>72
昔はハードが高価でいかに効率よく実装するかが大事だったけど、
今はハードも高性能で安価になってきたから
もうちょっとハードがソフトに歩み寄ってもいいんじゃないの?
ということなんだが。
2014/08/13(水) 13:27:22.49ID:dxftsD0h
>>73
たんに美学の問題なんだったら、
それこそ「どういうのが美しいのか」を例に挙げないと話が進まないんじゃねーの
751
垢版 |
2014/08/13(水) 18:42:03.57ID:O4gvlVlr
こんどこそID違うと思うけど1です。
どういうのが美しいかというと、教科書の記述をコピペすると
それがそのまま実装になるような言語がいいな。
用途は主に教育用。実用性はあんまり追わない。
2014/08/13(水) 19:07:44.67ID:1bb/GYoz
意味不明
2014/08/13(水) 19:14:36.99ID:OawzouLt
美味しいものが食べたい
781
垢版 |
2014/08/13(水) 20:07:16.34ID:O4gvlVlr
明日から2日くらいレスできなくなるけど、失踪したわけじゃないからな。
よろしく。
79デフォルトの名無しさん
垢版 |
2014/08/14(木) 00:15:37.33ID:qppS6X9h
ファジィ論理 - Wikipedia
ファジィ論理(ファジィろんり、英: Fuzzy logic)は、ファジィ集合から派生した多値論理の一種で、真理値が0から1までの範囲の値をとり、
古典論理のように「真」と「偽」という2つの値に限定されないことが特徴である。
ファジィ論理と確率論理は数学的に似ており、どちらも0から1までの値を真理値とするが、概念的には解釈の面で異なる。
ファジィ論理の真理値が「真の度合い」に対応しているのに対し、確率論理では「確からしさ」や「尤もらしさ」に対応している。




■[QC]量子コンピュータの基礎:振幅の初期化
本記事は、量子コンピュータの初期状態の作り方についてです。1998年に発表された手法です。
状態
2量子ビットの場合、0,1,2,3と4つの状態が作られます。
http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?\sqrt{\frac{1}{2}}|1>~+~\sqrt{\frac{1}{2}}|3>
を観測すると、振幅http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?\sqrt{\frac{1}{2}}
の2乗が出現確率なので、この状態を「観測」すると、50%の確率で|1>、50%の確率で|3>が得られます。
問題は、この状態をどうやって人為的に作り出すかというお話しです。
このレベルですら、論文になるほどの内容…。
http://d.hatena.ne.jp/yukoba/20090928/p1



量子プログラミング言語
蓮尾 一郎(東京大学大学院情報理工学系研究科)
星野 直彦(京都大学数理解析研究所)
量子プログラミング言語とは――研究の動機
量子計算の分野においてアルゴリズムを記述するためには,量子回路が用いるのが一般的だろう.
一方で,(量子でない)古典アルゴリズムを回路で表現することはあまりなく擬似コードとよばれるプログラムもどきが用いられる.
この一点においてすでに「量子計算のためのプログラミング言語とはどのようなものか?」という疑問が自然に浮かびあがるのであり,
筆者らはこの疑問に答えるべく(おもに数学的なアプローチから)研究を行っている.
しかし以下ではさらにもう少し,「量子プログラミング言語の実現によって何が可能となるのか?」ということについて論じたい.
http://www-mmm.is.s.u-tokyo.ac.jp/~ichiro/papers/quantProgLangJapaneseMar2014.pdf
2014/08/14(木) 07:53:05.12ID:18xo22zy
http://en.wikipedia.org/wiki/Z_notation
http://wwwold.stups.uni-duesseldorf.de/publications/proz.pdf
2014/08/14(木) 22:20:55.55ID:ao1eYSCw
「全貌はともあれこういうことをこうカッコよく書けそう」みたいなのをみたい
2014/08/15(金) 12:53:42.95ID:Aqg845W8
http://www.buzzword.jp/img/face10.png
831
垢版 |
2014/08/16(土) 08:32:34.29ID:ceF43G6L
>>81
とりあえず、正規表現と有限オートマトン、文脈自由言語とプッシュダウンオートマトン
あたりを美しく、または教科書のとおりに書きたいなと思ってる。
具体的な案はまだない。
2014/08/16(土) 09:06:38.11ID:/1p3o6vn
意味不明。雰囲気だけで語るな。
2014/08/16(土) 09:20:19.06ID:atIrV/RU
Peggyでいいじゃん。
2014/08/16(土) 09:21:32.20ID:InfE8TR8
だからせめて記述例を書けよ お前の脳内は読めねえ
87
垢版 |
2014/08/16(土) 09:37:02.60ID:ceF43G6L
だから具体的な案はまだないんだって。
88
垢版 |
2014/08/16(土) 10:17:23.81ID:ceF43G6L
有限オートマトンの遷移関数を書くのに、関数の引数のパターンマッチは欲しいかな。
89
垢版 |
2014/08/16(土) 10:35:06.72ID:ceF43G6L
と、おもったけどそんなめんどくさいことしなくても連想配列でもいいのか。
2014/08/16(土) 10:41:17.00ID:eWpr12Q+
>>87
ここはお前の日記帳じゃないんだから、具体的にまとまってから書いてくれ
911
垢版 |
2014/08/16(土) 11:51:35.82ID:ceF43G6L
俺が持ってる教科書、マイケルシプサの計算理論の基礎っていう本の38,39ページに載ってる
A={w|wは少なくとも一つの1を含み最後に現れる1の後に偶数個の0が存在する}
っていう言語を受理するオートマトンの実装例は以下のような感じかな。かなりC++ぽいが。
enum State {q1,q2,q3};
set<State> Q={q1,q2,q3};
set<char> Σ={'0','1'};
map<pair<State,char>,State> δ={
&nbsp;&nbsp;(q1,'0')=>q1,
&nbsp;&nbsp;(q1,'1')=>q2,
&nbsp;&nbsp;(q2,'0')=>q3,
&nbsp;&nbsp;(q2,'1')=>q2,
&nbsp;&nbsp;(q3,'0')=>q2,
&nbsp;&nbsp;(q3,'1')=>q2
};
set<State> F={q2};
class Automaton {
&nbsp;&nbsp;set<State> Q;
&nbsp;&nbsp;set<char> Σ;
&nbsp;&nbsp;map<pair<State,char>,State> δ;
&nbsp;&nbsp;State start;
&nbsp;&nbsp;set<State> F;

&nbsp;&nbsp;bool accept(char *str){
&nbsp;&nbsp;&nbsp;&nbsp;State state=start;
&nbsp;&nbsp;&nbsp;&nbsp;while(str){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state=δ[(state,*str)];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str++;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return F.include(state);
&nbsp;&nbsp;}
} M = (Q,Σ,δ,q1,F);
921
垢版 |
2014/08/16(土) 11:54:15.04ID:ceF43G6L
あれ、空白ミスってんな。
プレビューでみたらちゃんと空白になってたと思ったけど。
931
垢版 |
2014/08/16(土) 11:57:01.89ID:ceF43G6L
まあ、いいや。インデントなしで再投稿
enum State {q1,q2,q3};
set<State> Q={q1,q2,q3};
set<char> Σ={'0','1'};
map<pair<State,char>,State> δ={
(q1,'0')=>q1,
(q1,'1')=>q2,
(q2,'0')=>q3,
(q2,'1')=>q2,
(q3,'0')=>q2,
(q3,'1')=>q2
};
set<State> F={q2};
class Automaton {
set<State> Q;
set<char> Σ;
map<pair<State,char>,State> δ;
State start;
set<State> F;

bool accept(char *str){
State state=start;
while(str){
state=δ[(state,*str)];
str++;
}
return F.include(state);
}
} M = (Q,Σ,δ,q1,F);
2014/08/16(土) 13:25:37.77ID:atIrV/RU
Ragelでいいじゃん。
951
垢版 |
2014/08/16(土) 15:25:06.91ID:ceF43G6L
とりあえず、集合と連想配列と組のリテラル表記は欲しいな。
型さえ一致してれば組はクラスに暗黙のキャストできる感じで。
2014/08/16(土) 17:30:42.83ID:wloQcISK
目新しいものがないな。なんとなく美しくなりそうってのは天才的センスがないと実現しない。
天才か凡才かを確定させるためにさっさと作ってしまおう。
97
垢版 |
2014/08/16(土) 17:44:24.71ID:ceF43G6L
まじかw
言語仕様きめるだけでも結構大変だぞw
さくっと作れるみたいなこと言うなw
2014/08/16(土) 17:45:22.16ID:0H8IvnJl
結局、見た目の問題でしかないの?
新しいパラダイムもなにも無いなら、わざわざ言語を作る意味が無いよ
99
垢版 |
2014/08/16(土) 17:56:17.24ID:ceF43G6L
いまのところシンタックスシュガーの問題の域をでてないな。
オートマトンだけじゃなくてもっと色んな問題を考察していけば
なんか出てくるのかもしれないが。
とにかく、今のプログラミング言語において集合は不当に冷遇されてる気がする。
もっと集合を活躍させるべき、というのがこのスレの発端です。
2014/08/16(土) 17:59:58.20ID:0E9vEosE
>>75を具体的に語って欲しい
101
垢版 |
2014/08/16(土) 18:04:10.41ID:ceF43G6L
型のキャストって結構不自由じゃない?
集合論に基づいた型の表記法が一致したらバンバンキャストできるようにしちゃうとか。
2014/08/16(土) 18:09:17.80ID:ceF43G6L
>>100
いや、>>75を具体的に語ったのが>>93なんだけども。
残念ながら教科書コピペとはほど遠いC++チックなコードになっちゃったけど
教科書の定義にはなるべく従ったコードにしたつもり。
2014/08/17(日) 00:08:28.60ID:rJnEUKU4
OCamlのvariantみたいなことがしたいのかなあ?
104
垢版 |
2014/08/17(日) 00:17:38.28ID:wbAX39n3
OCamlは触ったことがないけど面白そうな雰囲気ですね。
本でもかってくるかな。
2014/08/17(日) 00:38:59.38ID:rJnEUKU4
>>1はCライクな言語しか触ったこと無いの?
だったら、もっと色々な言語を知るべきだよ。
その上でLispなり何なりで好きなようにDSLを実装すればいい。

少なくとも、集合が不当に冷遇されてるなんてことはない。ありえない。
106デフォルトの名無しさん
垢版 |
2014/08/17(日) 05:17:10.40ID:ruDVRpF3
集合論よりかは圏論のほうが良くないか。厳密には違うが、ほぼ集合論の一般化でプログラム言語として利用する上では不具合無いだろ。


Haskell/圏論 - Wikibooks
http://ja.wikibooks.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Simple-cat.png
http://ja.wikibooks.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Functor.png
http://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96

Scala で圏論入門
https://github.com/scalajp/introduction-to-category-theory-in-scala-jp/wiki


Coq を始めよう
このチュートリアルでは定理証明支援系言語である Coq について解説をします。
読者の前提知識としては OCaml や Haskell などの関数型言語でプログラミングできることを想定します。
また、本文書において Coq のプログラムとの比較には Haskell と OCaml を用いますが、Haskell や OCaml を書いたことがなくても他の関数型言語に触れていれば理解できるような内容を心がけます。
http://www.iij-ii.co.jp/lab/techdoc/coqt/coqt1.html



圏論は数学をするための「高級言語」 
http://www.is.s.u-tokyo.ac.jp/isnavi/images/logic/picture04.gif
http://www.is.s.u-tokyo.ac.jp/isnavi/logic06.html
107デフォルトの名無しさん
垢版 |
2014/08/17(日) 07:09:05.41ID:YbL+7IWD
メニー・コアの時代にはそういう言語が流行るんだろな。
108デフォルトの名無しさん
垢版 |
2014/08/17(日) 07:29:25.82ID:ruDVRpF3
圏論 - Wikipedia
圏論(けんろん、category theory)は、数学的構造とその間の関係を抽象的に扱う数学理論の 1 つである。
さらに一般的な圏論、つまり、意味論的な柔軟性をもち高階論理との親和性があるようなより現代的な普遍的代数が発展し、現在では数学全体を通して応用されている。
トポスと呼ばれる特別な種類の圏は、数学基礎論としての公理的集合論に取って代わることすら可能である。
実際構成的数学を記述する手段としても、トポスは非常に精緻に機能することが示されている。



集合論 - Wikipedia
さまざまな数学の問題に対応した構造を理解するときには、個々の対象が具体的にどんな集合として定義されたかということよりも、
類似の構造を持つほかの数学的対象との関係性の方がしばしば重要になる。
この関係性は対象間の写像のうちで「構造を保つ」ようなものによって定式化される。このような考え方を扱うために圏論が発達した。
集合論の著しい特徴は集合間の写像たちまでが再び集合として実現できることだが、こういった性質を圏論的に定式化することで
集合論の圏論化・幾何化ともいうべきトポスの概念がえられる。
109
垢版 |
2014/08/17(日) 09:26:36.14ID:wbAX39n3
>>105
私の使用言語は主にC/C++ですね。
あとはRubyを少々。JavaやC#はかじった程度。
関数型言語は触ったことないですね。

>少なくとも、集合が不当に冷遇されてるなんてことはない。ありえない。

うーん。そうなんですか。でもそれだとこのスレが終わってしまうw

>>106
圏論は知らないですね。なんか難しそうってイメージです。
はたして独学で勉強できるかどうか。。。
110デフォルトの名無しさん
垢版 |
2014/08/17(日) 09:41:10.85ID:ruDVRpF3
集合が{○、●、◎、□、■}とすると、
圏は{→(1)、→(2)、→(3)、→(4)、→(5)}>
111デフォルトの名無しさん
垢版 |
2014/08/17(日) 09:51:19.75ID:ruDVRpF3
途中で送信した。
(ある条件をみたす)全ての集合に対して、(ある条件をみたす)全ての集合の写像の集まりが圏。
圏論は、集合間の写像に注目したもの。
厳密なことは知らないが、どんな集合も圏として扱えるはずだろう。
集合{○、●、◎、□、■}に対して、圏{○→○、●→●、◎→◎、□→□、■→■}、(f(x)=xとなる写像)が作れる。
2014/08/17(日) 09:52:50.76ID:wbAX39n3
>>110
→の意味がわからないw
あと最後の>は必要なの?
113
垢版 |
2014/08/17(日) 09:53:56.42ID:wbAX39n3
うおリロードしてなかった。
114デフォルトの名無しさん
垢版 |
2014/08/17(日) 10:02:50.89ID:ruDVRpF3
圏の主人公って「対象」なのかな?「射」なのかな? | TETRA'S MATH


「しりとりの圏」を圏とみなそうとするとき、まず、1字1字があって、
http://artet-math.img.jugem.jp/20101201_1468744.jpg

 それを始域、終域とする文字列を考えるのか。
http://artet-math.img.jugem.jp/20101201_1468743.jpg

それとも、まず文字列ありきで、
http://artet-math.img.jugem.jp/20101201_1468745.jpg

始域、終域の一致でそれらの関係をひとまとまりのものとして捉えるのか…
http://artet-math.img.jugem.jp/20101201_1468746.jpg

どっちのイメージが圏の本質に近いのだろう?

で、検索していたら、檜山さんの有限集合と写像の圏もJavaScriptで書いてみた、遊んでみてねにて、「圏の主役は射です。」と書いてあるのを発見。なるほど。
http://math.artet.net/?eid=1306322
115
垢版 |
2014/08/17(日) 10:17:17.51ID:wbAX39n3
TODOが一気にふえたな。
とりあえず、Ocamlの本買ってきます。
圏論を理解できるようになるのは相当先かな〜。
2014/08/17(日) 10:34:34.27ID:kLc8LA2s
>>1はやりたいことが沢山あって圧倒される段階か。その後何年かして夢見た事はすべてやり尽くした段階になる。
能力が足りないとそうなるまえに死んでしまうがね。
117デフォルトの名無しさん
垢版 |
2014/08/17(日) 10:36:45.62ID:ruDVRpF3
Ocamlは副作用があって純粋な関数型でない。副作用ありでいいならJavascriptも関数型言語でJavascriptで関数型の勉強可能。



純粋関数型プログラミングとは
関数が純粋であるというのは、副作用がないということである。副作用とは、関数が、内部で、なんらかの状態を隠しもつことをいう。
OCamlのようなML由来の言語は"ほぼ純粋"である。副作用を、参照や配列の形で使えるけども、大抵は、書いたコードは純粋関数型に落ち着くことが多い。
Haskellもまた、関数型言語で、純粋関数型だ。OCamlは、より実用的といえる。純粋でない関数もときには便利だからだ。
http://ocaml.org/learn/tutorials/functional_programming.ja.html


JavaScriptで学ぶ関数型プログラミング
http://hamasyou.com/blog/2014/02/21/functional-javascript/

JavaScript はプロトタイプベースのオブジェクト指向言語ですが、関数型言語の機能も備えています。
http://www.geocities.jp/m_hiroi/light/js03.html


JavaScript - Javascrptで関数型プログラミングの入門 - Qiita
http://qiita.com/takeharu/items/cf98d352ff574c5ac536

JavaScriptは関数型言語の特徴を取り入れていると思いますが、純粋な関数型言語ではありません。しかし今、そしてこれからのトレンドは関数型言語と言われています。
そこでJavaScriptでより関数型言語的なプログラミングを可能にするfn.jsを使ってみましょう。
http://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
http://www.ibm.com/developerworks/jp/java/library/j-coffeescript/

Functional JavaScript
https://gist.github.com/ympbyc/5564146
118デフォルトの名無しさん
垢版 |
2014/08/17(日) 10:45:48.55ID: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); }

http://www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
119デフォルトの名無しさん
垢版 |
2014/08/17(日) 10:51:34.94ID: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))
}

http://paulownia.hatenablog.com/entry/20111204/1323015703
120
垢版 |
2014/08/17(日) 15:08:45.66ID:wbAX39n3
本屋めぐってきたけどOcamlの本なかったわー
廃れてしまった言語なん?
しかたないからwebで情報探すか。
2014/08/17(日) 15:31:49.05ID:8WbwPRMF
ググれば数秒でみつかるのに。
http://caml.inria.fr/resources/index.en.html
2014/08/17(日) 16:03:30.63ID:PGXi6tC2
>>109
> うーん。そうなんですか。でもそれだとこのスレが終わってしまうw
いいことじゃん。
続きはブログでやってくれ。
123
垢版 |
2014/08/25(月) 19:07:11.02ID:DrxGPTGS
とりあえず、Ocamlでconnect4のルールだけ作ってみた。
だれか添削たのむ。
http://www.age2.tv/rd05/src/up3979.txt

connect4はこことかで遊べます。
http://www.connectfour.org/connect-4-online.php
2014/08/25(月) 19:28:01.77ID:vcy2nNqb
以下>>1がOCamlを勉強するスレ
125
垢版 |
2014/08/25(月) 19:30:28.60ID:DrxGPTGS
いやw今はそうだけど、そのうち本題に戻りたいとは思ってる。
2014/08/25(月) 20:06:42.36ID:l0tzbBCe
この思考エンジンで。GUIはすでにあるから思考部だけ。



http://www.vector.co.jp/soft/win95/game/se401975.html

石を7つ直線に並べた方が勝ちという五目並べに、囲碁の石を取るという概念を加えた新しいゲーム「囲連星」。CPU戦も対人戦も楽しめる。

ルールは簡単!
1) 黒白交互に打っていき、先に縦・横・斜めに7つ石を並べたほうが勝ち
2) その間に相手の石を囲んで取ることが出来る
127
垢版 |
2014/08/25(月) 20:15:54.91ID:DrxGPTGS
ばかやろーw
囲連星つったら今までまともなAI作れたの2人しかいない難題じゃねーかw
もっと簡単な奴にしろw
2014/08/26(火) 17:44:18.47ID:Yj5Hd+B/
総当たりができなければモンテカルロでやりゃ良いじゃん
もっと素晴らしいのを見つけて欲しいな
129
垢版 |
2014/08/26(火) 19:40:10.91ID:FDxVWnbU
モンテカルロなら簡単だとおもってるな?
そんな甘くないから。
今のLV3のプログラムは相当レベル高いから。
2014/08/26(火) 20:14:52.44ID:k5rL1v3w
>>1程度の習熟度だとそうかもな
131
垢版 |
2014/08/26(火) 20:22:34.58ID:FDxVWnbU
>>130がLV3に勝ち越す囲連星AI作ったら納得してやる。
2014/08/26(火) 20:44:26.53ID:k5rL1v3w
>>1「これ知らなーい、あれも知らなーい」ばかりで、
挙句の果てには「数学のテクニックをプログラミングに持ち込めるかなと思った」だもんなあ。どんだけ無知なんだよ。

OCamlに興味を示したと思ったら、
>>1「connect4のルールだけ作ってみた。添削頼む()」とか、更にすっとぼけたこと言ってるし。

せめてスレタイに沿うような問題設定ができるまで学習しろ。
適切に問題設定ができないのに、コードをこねくり回したって意味ない。そりゃ只の自慰行為だ。
2014/08/26(火) 20:54:37.89ID:FDxVWnbU
>>132
俺が無知なのは認めるが、おまえが威張るのはLV3を超えるAIを作ってからだ。
そうでなきゃお前も口だけだぞ。
2014/08/26(火) 21:07:11.73ID:k5rL1v3w
別に威張ってないよ?
>>1の習熟度だと難しく感じるだろう、と言っただけ。

自尊心が傷ついたのかな。幼子みたいな奴だ。
次からは優しく諭すように指摘してあげるよ。

ところで、>>1のやりたいことって何だ?スレタイとは違うのか?
135
垢版 |
2014/08/26(火) 21:15:57.51ID:FDxVWnbU
まあ、一応スレタイの通りだな。
スレの方向はずれてきているが。
とりあえず、関数型言語を触ってみてるところだ。
2014/08/26(火) 21:47:40.66ID:UhLj/9Xy
LV3は大して強くない。手動でほぼ100%勝てる。
たぶんプログラムでも勝てると思う。
これは囲碁と違って有効手が見付けやすくモンテカルロ法は向いていないと思う。
2014/08/26(火) 22:01:43.24ID:2ww4+7z5
ダメダメだな。いつまでたっても何もできそうにない
138
垢版 |
2014/08/26(火) 22:10:51.94ID:FDxVWnbU
>>136
手動なら俺だって勝てるわ。
ほぼ100%とはいかないけど。
プログラムで勝ち越すことに意義がある。
LV3に勝ち越して人間相手にも自然な手を返せるプログラムが作れるってならぜひ作ってほしいね。
一囲連星ファンとして。

>>137
その可能性は非常に高いw
2014/08/26(火) 22:21:22.44ID:2ww4+7z5
ふーん。ならスレ終了でOKだな
140
垢版 |
2014/08/27(水) 18:26:42.61ID:VCMYq2O7
>>139
まあ、そうあせらずに。
どうせ過疎板だ。
ノンビリ行こう。
2014/08/27(水) 19:44:52.25ID:FS966Rgy
はあ?これ以上妄言を垂れ流すならブログでやれば?
2014/08/27(水) 21:12:10.16ID:sWLZW0su
1のスレだし見たくないやつが来なければ済む
143
垢版 |
2014/08/28(木) 19:02:16.77ID:NyU3eawL
しかしOcamlはプログラム組みにくいな。
ちょっとしたことやるにも再帰関数つかうっぽいし。
慣れてないだけかもしれんが。
2014/08/28(木) 19:15:00.80ID:Qmt6TOBF
慣れてないだけ。
2014/08/28(木) 19:38:25.81ID:RkFVOWz2
>>143
http://peace.2ch.net/test/read.cgi/tech/1330429547/413-418
146
垢版 |
2014/08/28(木) 20:42:22.39ID:NyU3eawL
>>145
俺がこんなこと言っちゃいかんのかもしれんが、
確かに参照透過性とか数学的にはいいのかもしれんが、
実用性では怪しく感じる。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況