計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
集合論に基づいた言語を作りたい
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/08/10(日) 21:27:16.56ID:x7G32Sd0231デフォルトの名無しさん
2014/09/12(金) 03:48:40.55ID:5DSOPRX8 結論
ハスケル村民は中二病
ハスケル村民は中二病
232デフォルトの名無しさん
2014/09/12(金) 19:25:03.94ID:i5Uyd5M3233デフォルトの名無しさん
2014/09/12(金) 19:43:34.87ID:ke/j7I6c 文脈のある文章を文脈から取り出してセンセーショナルに騒ぐ奴はバカ、でFA
234デフォルトの名無しさん
2014/09/12(金) 19:54:30.05ID:i5Uyd5M3 関数志向宣言型プログラミング言語って呼べばいいのかな
235デフォルトの名無しさん
2014/09/12(金) 19:55:16.20ID:i5Uyd5M3 誤字った
関数指向宣言型プログラミング言語
関数指向宣言型プログラミング言語
236デフォルトの名無しさん
2014/09/12(金) 20:06:23.28ID:Iy5dUXcN 略して関数型言語
2371
2014/09/13(土) 11:02:47.39ID:NSrcGDnS2381
2014/09/13(土) 19:54:59.71ID:NSrcGDnS >>237のコードは一手打つたびに盤面を丸コピーしてると思うんだが
そこらへんコンパイラが上手いことやってくれてるの?
そこらへんコンパイラが上手いことやってくれてるの?
239デフォルトの名無しさん
2014/09/14(日) 00:53:22.93ID:N78ccrO0 囲連星で
240デフォルトの名無しさん
2014/09/14(日) 07:25:06.11ID:3VDbXkPO2411
2014/09/14(日) 10:08:34.40ID:rj6ubMt8242デフォルトの名無しさん
2014/09/14(日) 15:18:34.44ID:sID153LP 最初のほうだけ読んだけど、
言語知らなすぎだろ。
それで言語作ろうなんて、10年早いわ。
もっとも、実用性なんてどうでもいい。
言語作ってみたいとか、作ることで、プログラミングというものを知りたいってのなら、
まったくもって問題無く、むしろ頑張れって感じだけど。
言語知らなすぎだろ。
それで言語作ろうなんて、10年早いわ。
もっとも、実用性なんてどうでもいい。
言語作ってみたいとか、作ることで、プログラミングというものを知りたいってのなら、
まったくもって問題無く、むしろ頑張れって感じだけど。
2431
2014/09/14(日) 15:57:37.44ID:rj6ubMt8 >>239
ちなみに囲連星AIは昔作ったことある。
もっといえばゲ制作板の囲連星AIスレの380は俺だ。
ちなみに9路囲連星のGUIを作ったのも俺。
囲連星は一回やってもう挫折してるんだよ。
>>240
とりあえず、パターンマッチにしてみました。
letはそのまんま。だってwhereきもいんだもん。
http://www.age2.tv/rd05/src/up4284.txt.html
>>242
まあな。俺の実力じゃ実用的な言語を作るのは無理だろうな。
でもそれはほとんどのプログラマがそうだろ。
実用的な言語つくれるプログラマなんて一握りだろ。
もっといえば実用的な言語って一人で作れるようなものじゃないだろ。
ちなみに囲連星AIは昔作ったことある。
もっといえばゲ制作板の囲連星AIスレの380は俺だ。
ちなみに9路囲連星のGUIを作ったのも俺。
囲連星は一回やってもう挫折してるんだよ。
>>240
とりあえず、パターンマッチにしてみました。
letはそのまんま。だってwhereきもいんだもん。
http://www.age2.tv/rd05/src/up4284.txt.html
>>242
まあな。俺の実力じゃ実用的な言語を作るのは無理だろうな。
でもそれはほとんどのプログラマがそうだろ。
実用的な言語つくれるプログラマなんて一握りだろ。
もっといえば実用的な言語って一人で作れるようなものじゃないだろ。
244デフォルトの名無しさん
2014/09/14(日) 16:15:43.91ID:w3keaoOy 囲連星ってそんなに難しいか?
やってみるか。
やってみるか。
245デフォルトの名無しさん
2014/09/14(日) 16:39:35.29ID:sID153LP >>243
自分がそうだからって、
「ほとんど」とか、他の人を巻き添えに足引っ張るな。
自分の未熟さを棚に上げる愚かな行為だ。
RubyのMazsとか、言語オタクだぞ。
そうじゃなきゃ作れないってことだ。
自分がそうだからって、
「ほとんど」とか、他の人を巻き添えに足引っ張るな。
自分の未熟さを棚に上げる愚かな行為だ。
RubyのMazsとか、言語オタクだぞ。
そうじゃなきゃ作れないってことだ。
2461
2014/09/14(日) 17:59:15.91ID:rj6ubMt8 >>244
がんばれ、応援するよ。LV3越えは俺の悲願でもあるから。
だれかほかの人でも達成してくれたらうれしい。
できあがったらゲ制作の囲連星AIスレで報告してくれ。
>>245
そこでMatzみたいなスーパースター引き合いに出してどうすんだよ?
Matsは一握りかほとんどかで言ったら明らかに一握りだろ。
そのMatzにしたってRubyコミュニティの支えなしじゃここまでやれなかっただろ。
だいたいGoとかD言語みたいなスーパースターたちが作った言語だって
はたして「実用」と呼べるほどのユーザーを獲得してるかどうか。
言語をつくるって大変なことだと思うよ。
まあ、自分の未熟さを棚にあげてるのはそうかもしれんが。
がんばれ、応援するよ。LV3越えは俺の悲願でもあるから。
だれかほかの人でも達成してくれたらうれしい。
できあがったらゲ制作の囲連星AIスレで報告してくれ。
>>245
そこでMatzみたいなスーパースター引き合いに出してどうすんだよ?
Matsは一握りかほとんどかで言ったら明らかに一握りだろ。
そのMatzにしたってRubyコミュニティの支えなしじゃここまでやれなかっただろ。
だいたいGoとかD言語みたいなスーパースターたちが作った言語だって
はたして「実用」と呼べるほどのユーザーを獲得してるかどうか。
言語をつくるって大変なことだと思うよ。
まあ、自分の未熟さを棚にあげてるのはそうかもしれんが。
2471
2014/09/14(日) 18:14:29.35ID:rj6ubMt8 あら、MatzがMatsになってた。
誤字すまん。
誤字すまん。
248デフォルトの名無しさん
2014/09/14(日) 18:30:48.41ID:s+BV7Cb9 新言語かぁ‥誰しも夢見るね‥haskell が圏論というのであれば、今後新言語を作るとすれば何を足がかりにすればいいのか?
249デフォルトの名無しさん
2014/09/14(日) 19:26:12.34ID:r0J72yK/ Haskell自体は圏論ベースじゃないぞ。
モナドだけ。
モナドだけ。
250デフォルトの名無しさん
2014/09/14(日) 19:33:25.07ID:s+BV7Cb9 そうなのか‥懐かしい名前、大熊正先生の著書をヤフオクでえらい高い値段でgetしてしまった(無論、読めやしない‥専門書って大変だね‥)が、無意味だったようだね
251デフォルトの名無しさん
2014/09/14(日) 20:19:23.00ID:NJi0vj84 集合論に基づく言語は、SIMDやメニーコアが発展していくうちに普通になると思うけど、
今は、C++をシンプルにした感じのスクリプト言語が欲しい。
まだ、集合論に基づく言語が手続き型を超える性能を出せる環境になってないから。
今は、C++をシンプルにした感じのスクリプト言語が欲しい。
まだ、集合論に基づく言語が手続き型を超える性能を出せる環境になってないから。
2521
2014/09/14(日) 20:55:06.50ID:rj6ubMt8 結局、ハードの作りが根本から変わらん限り
C/C++を超える言語は現れないんじゃないかな。
超えるっていってもどういう意味で超えるのか微妙だけど。
C/C++を超える言語は現れないんじゃないかな。
超えるっていってもどういう意味で超えるのか微妙だけど。
253デフォルトの名無しさん
2014/09/14(日) 21:30:29.03ID:s+BV7Cb9 C の言語仕様にキャリーフラグを含めてほしかった‥ちょっと今苦戦中
2541
2014/09/14(日) 22:27:09.05ID:rj6ubMt8 C言語の言語仕様だけでキャリーフラグって実現できるんだっけ?
できるんだろうけど、ぱっと思いつかないな。
できるんだろうけど、ぱっと思いつかないな。
255デフォルトの名無しさん
2014/09/14(日) 22:52:20.28ID:r0J72yK/ これ参考になるかも
ttp://d.hatena.ne.jp/tociyuki/20140906/1410012689
ttp://d.hatena.ne.jp/tociyuki/20140906/1410012689
2561
2014/09/14(日) 22:53:39.24ID:rj6ubMt8 最悪、すべての演算結果をテーブル化しておけば実現できるなw
効率的にはどうやるんだろう?
効率的にはどうやるんだろう?
2571
2014/09/14(日) 22:54:40.97ID:rj6ubMt8 おおっとリロードしてなかった。
258デフォルトの名無しさん
2014/09/15(月) 00:55:12.74ID:MGTym664 ts
259240
2014/09/15(月) 06:10:27.36ID:8SU9zqnx >>243
たとえば、
let c = map digitToInt ( filter isDigit s)
は
let c = map digitToInt . filter isDigit $ "123"
にできる。
さらに、
s_to_line :: String -> [Int]
s_to_line = map digitToInt . filter isDigit
と関数を定義しておいて、
let c = s_to_line s
とすると、ググッとHaskellっぽくなる。
たとえば、
let c = map digitToInt ( filter isDigit s)
は
let c = map digitToInt . filter isDigit $ "123"
にできる。
さらに、
s_to_line :: String -> [Int]
s_to_line = map digitToInt . filter isDigit
と関数を定義しておいて、
let c = s_to_line s
とすると、ググッとHaskellっぽくなる。
2611
2014/09/15(月) 11:16:32.32ID:bIq53OoI しかしOcamlよりhaskellのほうが書いててたのしいな。
なんでだろう?
なんでだろう?
262デフォルトの名無しさん
2014/09/15(月) 15:28:20.49ID:kzUO2epp 写真には写らない美しさがあるから
263デフォルトの名無しさん
2014/09/15(月) 16:34:50.30ID:kAk3iSbn リンダリンダ〜♪
2641
2014/09/15(月) 16:46:42.27ID:bIq53OoI だれか>>243のコードのplayの関数を、一手打つごとに盤面を丸コピーしないで済むように改善してください。
よろしくお願いします。
よろしくお願いします。
2651
2014/09/15(月) 20:32:54.71ID:bIq53OoI266240
2014/09/16(火) 09:53:54.34ID:Qs6Ucf5H268デフォルトの名無しさん
2014/09/16(火) 19:28:35.09ID:i9frET+F 参照透過性は、プログラマが気にすることではない。
コンパイラ、言語が気にすること。
純粋関数型言語は、参照透過性に違反できないのが原則。
純粋関数型でコンパイルが通れば参照透過性がある。
コンパイラ、言語が気にすること。
純粋関数型言語は、参照透過性に違反できないのが原則。
純粋関数型でコンパイルが通れば参照透過性がある。
2701
2014/09/16(火) 20:03:52.99ID:bFn0xUvd setElemの計算量オーダーが書いてないな。
ほかのは書いてあるのもあるのに。
ほかのは書いてあるのもあるのに。
271デフォルトの名無しさん
2014/09/16(火) 20:35:47.52ID:+Ut5bl5+ >>269
純粋関数型言語における配列の実装は、
一般的には B-Tree またはその亜種を用いるのが一般的
で、常識的には更新する要素とは無関係な部分ツリー(への参照)を
そのまま(更新後の)新しい配列に引き継ぐから、丸コピーにはならない
(Data.Matrixのソースを確認した訳じゃないんで、あくまで一般論であることに注意)
また、配列を利用するアプリケーション側でも、必要な複数の更新操作を関数合成で
まとめてから適用するのが一般的だから、更新のオーバヘッドもさほど気にならない
更に言えば、>>243のように(ライブラリを用いず)自前でリストを配列に見立てて
配列操作を実装するのは自由な選択だけど、メモリ効率を考慮しなければならないケースであれば、
(>>243のように)配列更新のたびにリストを丸コピーするのは、お馬鹿さんと言うしかない
リストの一要素だけを更新する時、更新した要素の tail リストは更新後のリストと共有できるはずだ
最後に、こういったパズル/ボードゲーム系の全解探索問題を記述する場合、何も考えず
ゲームの局面ごとに盤面全体を丸々コピーするコードを書いてしまうのは、純粋/非純粋な関数型に限らず
手続き型プログラミングであったとしても初心者レベルのコード設計力だと見なすしかない
通常、チェスや将棋のように膨大な空間を探索しなければならないゲームのプログラミングでは、
プレイの「一手(いって)」に関する情報だけを局面として記憶し、差分として管理する
純粋関数型言語における配列の実装は、
一般的には B-Tree またはその亜種を用いるのが一般的
で、常識的には更新する要素とは無関係な部分ツリー(への参照)を
そのまま(更新後の)新しい配列に引き継ぐから、丸コピーにはならない
(Data.Matrixのソースを確認した訳じゃないんで、あくまで一般論であることに注意)
また、配列を利用するアプリケーション側でも、必要な複数の更新操作を関数合成で
まとめてから適用するのが一般的だから、更新のオーバヘッドもさほど気にならない
更に言えば、>>243のように(ライブラリを用いず)自前でリストを配列に見立てて
配列操作を実装するのは自由な選択だけど、メモリ効率を考慮しなければならないケースであれば、
(>>243のように)配列更新のたびにリストを丸コピーするのは、お馬鹿さんと言うしかない
リストの一要素だけを更新する時、更新した要素の tail リストは更新後のリストと共有できるはずだ
最後に、こういったパズル/ボードゲーム系の全解探索問題を記述する場合、何も考えず
ゲームの局面ごとに盤面全体を丸々コピーするコードを書いてしまうのは、純粋/非純粋な関数型に限らず
手続き型プログラミングであったとしても初心者レベルのコード設計力だと見なすしかない
通常、チェスや将棋のように膨大な空間を探索しなければならないゲームのプログラミングでは、
プレイの「一手(いって)」に関する情報だけを局面として記憶し、差分として管理する
2721
2014/09/16(火) 20:55:03.92ID:bFn0xUvd ふーむ。
たしかにツリーをつかえば丸コピーは避けられるかもしれないな。
勉強になりました。
たしかにツリーをつかえば丸コピーは避けられるかもしれないな。
勉強になりました。
2731
2014/09/16(火) 21:47:36.14ID:bFn0xUvd Data.Matrixがないって言われる…
なぜ?
$ ghc connect4_4.hs
connect4_4.hs:3:8:
Could not find module ‘Data.Matrix’
Perhaps you meant
Data.Ratio (from base)
Data.Ratio (needs flag -package haskell2010-1.1.2.0)
Use -v to see a list of the files searched for.
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3
なぜ?
$ ghc connect4_4.hs
connect4_4.hs:3:8:
Could not find module ‘Data.Matrix’
Perhaps you meant
Data.Ratio (from base)
Data.Ratio (needs flag -package haskell2010-1.1.2.0)
Use -v to see a list of the files searched for.
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3
2751
2014/09/16(火) 22:31:31.46ID:bFn0xUvd276デフォルトの名無しさん
2014/09/16(火) 22:50:04.77ID:fJmUlCeF >>253
アセンブラ以外で言語仕様にキャリーフラグが関与する演算子があるのは TL/1 しか見たことない
アセンブラ以外で言語仕様にキャリーフラグが関与する演算子があるのは TL/1 しか見たことない
2771
2014/09/16(火) 23:22:16.78ID:bFn0xUvd Matrix版できたっぽいのであげます。
http://www.age2.tv/rd05/src/up4372.txt
Matrixのindexは1から始まるそうなのでそれに合わせて外部仕様も変更しました。
いままでは列の指定が0〜6だったのが1〜7になります。
今思えば外部仕様まで変えることはなかったような気もしますが後の祭り。
http://www.age2.tv/rd05/src/up4372.txt
Matrixのindexは1から始まるそうなのでそれに合わせて外部仕様も変更しました。
いままでは列の指定が0〜6だったのが1〜7になります。
今思えば外部仕様まで変えることはなかったような気もしますが後の祭り。
278デフォルトの名無しさん
2014/09/16(火) 23:34:02.05ID:i9frET+F よく知られてるゲーム、GUIのあるゲームで頼む。
麻雀、OTHELLO、将棋、囲連星はwindowsGUIはある。
麻雀、OTHELLO、将棋、囲連星はwindowsGUIはある。
2791
2014/09/16(火) 23:38:22.55ID:bFn0xUvd 習作だから実用性はあんまり求めてないんだよなぁ。
connect4は小さい割に動いてるもの作ってる気になれるから気に入ってる。
connect4は小さい割に動いてるもの作ってる気になれるから気に入ってる。
280240
2014/09/17(水) 06:12:56.94ID:Rq9rJBGz >>277
結構よいのでは。
しつこいけど、whereは1度使ってみたらいいんじゃないかなあ。
letで頭から読む/書くという感覚もわかるけど、
whereを使うと、1つの関数定義全体を宣言的に読む/書く感覚がわかると思う。
結構よいのでは。
しつこいけど、whereは1度使ってみたらいいんじゃないかなあ。
letで頭から読む/書くという感覚もわかるけど、
whereを使うと、1つの関数定義全体を宣言的に読む/書く感覚がわかると思う。
281デフォルトの名無しさん
2014/09/17(水) 12:19:24.89ID:pJCF9C7A282デフォルトの名無しさん
2014/09/17(水) 13:02:50.04ID:Rq9rJBGz >>268
> 純粋関数型でコンパイルが通れば参照透過性がある。
え?純粋関数型で型検査によって参照透明性を確保しているのはHaskellぐらいでは。
Haskell以外の、例えばMirandaやClean等の他の純粋関数型言語では、
型システムに依存せずに言語機能を制約して参照透明性を確保している
という理解なんだが。
> 純粋関数型でコンパイルが通れば参照透過性がある。
え?純粋関数型で型検査によって参照透明性を確保しているのはHaskellぐらいでは。
Haskell以外の、例えばMirandaやClean等の他の純粋関数型言語では、
型システムに依存せずに言語機能を制約して参照透明性を確保している
という理解なんだが。
283デフォルトの名無しさん
2014/09/17(水) 13:40:46.72ID:Fq6HYI62 参照透過性は型とは関係ないだろ?
型があってもなくても破壊的代入があったらアウト。
型があってもなくても破壊的代入があったらアウト。
284デフォルトの名無しさん
2014/09/17(水) 13:41:37.54ID:pJCF9C7A ちょっと本題から外れるが。
たしかに本格的に型システムと一体化させたのはHaskellからだけど、
Mirandaから参照透過性に対して型システムは使い始めてる。
MirandaでKAOSってOSを記述した時のinteract型が、
Miranda本体にも取り入れられてる。
この時に導入されたcomp, returnがmonadタイプの定式化の元になった。
E. Moggiが"Notions of computations and monads"で定式化して。
Haskellを設計、開発することになったのは、
この辺を本格的にやろうと思うとオープンソースじゃないとやりにくいから。
たしかに本格的に型システムと一体化させたのはHaskellからだけど、
Mirandaから参照透過性に対して型システムは使い始めてる。
MirandaでKAOSってOSを記述した時のinteract型が、
Miranda本体にも取り入れられてる。
この時に導入されたcomp, returnがmonadタイプの定式化の元になった。
E. Moggiが"Notions of computations and monads"で定式化して。
Haskellを設計、開発することになったのは、
この辺を本格的にやろうと思うとオープンソースじゃないとやりにくいから。
285デフォルトの名無しさん
2014/09/17(水) 14:19:32.02ID:Rq9rJBGz2861
2014/09/17(水) 19:25:16.95ID:zOPUPbSB >>280
where使ってみました。
ただ、gameの中のletはどうやってwhereにすればいいかよくわからなかったのでletのままです。
http://www.age2.tv/rd05/src/up4389.txt
where使ってみました。
ただ、gameの中のletはどうやってwhereにすればいいかよくわからなかったのでletのままです。
http://www.age2.tv/rd05/src/up4389.txt
287240
2014/09/18(木) 17:39:55.46ID:gCmSXIgb2881
2014/09/18(木) 19:52:18.04ID:WHOt2iCh >>287
ありがとうございます。
haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
CPUのコアがもっと増えてコンパイラの最適化が今より強力になったらどうかわからんが、
C/C++より効率的なコーディングをするのは難しそう。
かといって生産性が劇的にあがるかというとそんな感触もなかった。
RubyにはC/C++より生産性高いと思わせるなにかがあったが
haskellとRubyを比べた時、はたしてhaskellのほうが生産性高いかといわれると?
もうちょっとデカいアプリを組んでみる必要があるのかもしれんが。
とりあえず、haskellでコーディングされた実用的で有名なアプリがあれば教えてほしいです。
ありがとうございます。
haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
CPUのコアがもっと増えてコンパイラの最適化が今より強力になったらどうかわからんが、
C/C++より効率的なコーディングをするのは難しそう。
かといって生産性が劇的にあがるかというとそんな感触もなかった。
RubyにはC/C++より生産性高いと思わせるなにかがあったが
haskellとRubyを比べた時、はたしてhaskellのほうが生産性高いかといわれると?
もうちょっとデカいアプリを組んでみる必要があるのかもしれんが。
とりあえず、haskellでコーディングされた実用的で有名なアプリがあれば教えてほしいです。
289デフォルトの名無しさん
2014/09/18(木) 19:55:50.99ID:7eeU4PcQ Monadius
1985年5月29日、そのゲームは、全国のゲーマーに衝撃を与えた。
らしい。
僕はよく知らない。そのときまだ生まれたばかりだったからだ。
20周年をむかえたグラディウスと、 ゲームを、ゲームプログラミングを愛する人たちに感謝を込めて贈る。
http://www.geocities.jp/takascience/haskell/monadius_ja.html
1985年5月29日、そのゲームは、全国のゲーマーに衝撃を与えた。
らしい。
僕はよく知らない。そのときまだ生まれたばかりだったからだ。
20周年をむかえたグラディウスと、 ゲームを、ゲームプログラミングを愛する人たちに感謝を込めて贈る。
http://www.geocities.jp/takascience/haskell/monadius_ja.html
2911
2014/09/19(金) 19:22:36.10ID:KT7u8M0C >そういうデータの一塊であるMonadiusが、 updateMonadius, renderMonadius, isMonadiusOverという演算に関してGameを成す、と宣言されています。
これが圏論ってやつ?
これが圏論ってやつ?
292デフォルトの名無しさん
2014/09/19(金) 19:58:12.78ID:vmyXN9M9 数学得意なら圏論から攻めてもいいと思うけど、
モナドは圏論わからなくても使うことはできるので...
モナドは圏論わからなくても使うことはできるので...
294240
2014/09/19(金) 21:47:04.42ID:3WQN+no2 >>293
それ自体は圏論じゃなくて型クラス。
型gがGameクラスであるためには
そのupdate, render, isGameoverの3つのメソッドが必要だと宣言されていて、
Monadius型はGame型クラスのインスタンスです、
メソッドはそれぞれupdateMonadius, renderMonadius, isMonadiusOverになります、
というもの。
それ自体は圏論じゃなくて型クラス。
型gがGameクラスであるためには
そのupdate, render, isGameoverの3つのメソッドが必要だと宣言されていて、
Monadius型はGame型クラスのインスタンスです、
メソッドはそれぞれupdateMonadius, renderMonadius, isMonadiusOverになります、
というもの。
296デフォルトの名無しさん
2014/09/19(金) 22:17:11.20ID:uV7lv+mi これは最近よく目にするfilter-map-reduceとは違うの?
297240
2014/09/20(土) 07:19:58.23ID:p45kbQiW >>295
型クラスは値ではなくて型のクラスってところがユニーク。
Haskellの型クラスはJava等のインターフェースより柔軟に使える。
Java等のインターフェースとクラスの関係は、
クラスを定義する時に「このインターフェースを実装します」と宣言するけど、
Haskellの型クラスでは、型クラスと型をそれぞれ別々に定義した上で、
「この型はこの型クラスのインスタンスだよ」と宣言する。
つまり、既存の型や既存の型クラスを使って、後から
「この型をこの型クラスのインスタンスとして使うよ」ということができる。
実は、286のコードでも型クラスのメソッドが多数使われている。
Ord型クラスのメソッドの>とか<とか、Eq型クラスのメソッドの==とか。
あと、game関数やmain関数の型を見ると、IO型クラスを使っていることがわかる。
型クラスは値ではなくて型のクラスってところがユニーク。
Haskellの型クラスはJava等のインターフェースより柔軟に使える。
Java等のインターフェースとクラスの関係は、
クラスを定義する時に「このインターフェースを実装します」と宣言するけど、
Haskellの型クラスでは、型クラスと型をそれぞれ別々に定義した上で、
「この型はこの型クラスのインスタンスだよ」と宣言する。
つまり、既存の型や既存の型クラスを使って、後から
「この型をこの型クラスのインスタンスとして使うよ」ということができる。
実は、286のコードでも型クラスのメソッドが多数使われている。
Ord型クラスのメソッドの>とか<とか、Eq型クラスのメソッドの==とか。
あと、game関数やmain関数の型を見ると、IO型クラスを使っていることがわかる。
298デフォルトの名無しさん
2014/09/20(土) 12:34:10.95ID:rTgfsjb+ C++14で型クラス的なconceptってのが入りそうになったけど、
時期尚早ってことで見送られた。
次にStroustrupが簡略化した版が入る予定。
時期尚早ってことで見送られた。
次にStroustrupが簡略化した版が入る予定。
299デフォルトの名無しさん
2014/09/20(土) 17:49:48.64ID:k+DS8D97 >>1は何をしたいんだ。
関数型言語は効率が悪そうたって、「集合論に基づいた言語」とかいうのはもっと効率が悪くなるだろうに。
関数型言語は効率が悪そうたって、「集合論に基づいた言語」とかいうのはもっと効率が悪くなるだろうに。
3001
2014/09/20(土) 22:48:20.83ID:YTPHYjLC301デフォルトの名無しさん
2014/09/20(土) 23:24:10.24ID:rTgfsjb+ http://en.wikibooks.org/wiki/Haskell/Classes_and_types
のA concerted exampleと同じことをtype classなしで書いてみれば?
type classがあると細々としたことまで、
少ないコード量で強く型付けできることが分かるはず。
のA concerted exampleと同じことをtype classなしで書いてみれば?
type classがあると細々としたことまで、
少ないコード量で強く型付けできることが分かるはず。
302デフォルトの名無しさん
2014/09/21(日) 13:51:15.50ID:jEJWijVn >>288
> haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
参照透明の良さっていうのは、逆から言うと、状態が沢山あるコードはクソだ、ってこと。
停止性問題で難題になったのは、状態が少し増えるだけで組み合わせの数が爆発すること。
再代入が減らせれば、コードの複雑性が減ることがあるから、参照透明がありがたい。
関数型の良さは、宣言型言語であること。参照透明は関数型言語の目的ではなく、それを必要としているというだけだ。
生産性が劇的に上がるかというと、c++でテンプレートメタプログラミングしてる人からそれを取り上げたら劇的に生産性が下がると言うだろうし、const をc++から取り除いても劇的に生産性が下がるだろう。
Ruby と haskell を比べても仕方ない。
一つのプロジェクトで一つの言語しか使えないわけではないのだから、部分によって、書きやすい言語、高速な言語、ライブラリの充実した言語を使い分ければよい。
そして Ruby でも関数型スタイルで一部を書くことができる。
なんかちょっと固定観念が強い気がする。
あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
> haskell触ってみたけど、今のところ関数型言語や参照透過性の有難さはあんまり実感できてない。
参照透明の良さっていうのは、逆から言うと、状態が沢山あるコードはクソだ、ってこと。
停止性問題で難題になったのは、状態が少し増えるだけで組み合わせの数が爆発すること。
再代入が減らせれば、コードの複雑性が減ることがあるから、参照透明がありがたい。
関数型の良さは、宣言型言語であること。参照透明は関数型言語の目的ではなく、それを必要としているというだけだ。
生産性が劇的に上がるかというと、c++でテンプレートメタプログラミングしてる人からそれを取り上げたら劇的に生産性が下がると言うだろうし、const をc++から取り除いても劇的に生産性が下がるだろう。
Ruby と haskell を比べても仕方ない。
一つのプロジェクトで一つの言語しか使えないわけではないのだから、部分によって、書きやすい言語、高速な言語、ライブラリの充実した言語を使い分ければよい。
そして Ruby でも関数型スタイルで一部を書くことができる。
なんかちょっと固定観念が強い気がする。
あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
303デフォルトの名無しさん
2014/09/21(日) 14:55:43.06ID:hG2OFVWB 「集合論に基づいた言語」をつくるうえで参考になるかもしれないということで関数型言語の話が
出てきているんだろうけど、>>1はそれについて、参考になったとか、自分が考えているのとはこう違うから
参考にならなかったという話はせず、効率やら生産性の話をするんだよな。
「集合論に基づいた言語」で効率や生産性の向上を目的としてないなら、関数型言語で効率や生産性の向上が
なくてもどうでもいいことだと思うけど。
出てきているんだろうけど、>>1はそれについて、参考になったとか、自分が考えているのとはこう違うから
参考にならなかったという話はせず、効率やら生産性の話をするんだよな。
「集合論に基づいた言語」で効率や生産性の向上を目的としてないなら、関数型言語で効率や生産性の向上が
なくてもどうでもいいことだと思うけど。
304デフォルトの名無しさん
2014/09/21(日) 15:30:26.77ID:hG2OFVWB 無限集合を扱おうとすれば、関数型言語にあるような遅延評価か、論理型言語にあるような全解収集をするしかないだろ。
要素の重複を認めないのなら、生成されたものがすでに集合に含まれているかどうか調べるためのしくみも必要だし。
集合の包含関係はどのように調べるんだろ。
それとも数式処理のようなものを考えているのかな。
要素の重複を認めないのなら、生成されたものがすでに集合に含まれているかどうか調べるためのしくみも必要だし。
集合の包含関係はどのように調べるんだろ。
それとも数式処理のようなものを考えているのかな。
3051
2014/09/21(日) 16:27:12.72ID:iz+Z8HKh >>302
関数型言語には状態がないってのはなんとなくしっくりこないなぁ。
状態はあるけど考慮しなきゃいけないスコープが関数の引数に限られるってイメージなんだが。
あと、参照透過性を守ったって停止性問題が根本的に解決するわけじゃないよね?
>なんかちょっと固定観念が強い気がする。
まあ、おれもいいおっさんだからな。
それなりに固定観念はあるだろう。
>あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
これは自覚症状ないんだが。たとえばどの辺が分かったつもりの発言になってる?
>>303
言語を評価するとなったら効率か生産性かだろう。
集合論に基づいた言語では狭い領域の問題に限り(教科書の章末問題とか)
高い生産性を発揮することを目標にしてる。
関数型言語触ってみたけど>>286のコードに関していえばヒントになるようなものはなかった。
型クラスとかは勉強すれば面白いのかもしれん。
関数型言語には状態がないってのはなんとなくしっくりこないなぁ。
状態はあるけど考慮しなきゃいけないスコープが関数の引数に限られるってイメージなんだが。
あと、参照透過性を守ったって停止性問題が根本的に解決するわけじゃないよね?
>なんかちょっと固定観念が強い気がする。
まあ、おれもいいおっさんだからな。
それなりに固定観念はあるだろう。
>あとコンピュータサイエンスと言語の歴史を知らないのにあれこれ分かったつもりになってるように見えるのが不安。
これは自覚症状ないんだが。たとえばどの辺が分かったつもりの発言になってる?
>>303
言語を評価するとなったら効率か生産性かだろう。
集合論に基づいた言語では狭い領域の問題に限り(教科書の章末問題とか)
高い生産性を発揮することを目標にしてる。
関数型言語触ってみたけど>>286のコードに関していえばヒントになるようなものはなかった。
型クラスとかは勉強すれば面白いのかもしれん。
307デフォルトの名無しさん
2014/09/21(日) 19:35:49.05ID:hG2OFVWB 無しの方向ってどうするの?
自然数全体の集合等を扱わないとか、内包的記法を扱わないとか。
自然数全体の集合等を扱わないとか、内包的記法を扱わないとか。
3081
2014/09/21(日) 20:23:58.88ID:iz+Z8HKh 自然数全体の集合の部分集合は基本的に表現するのに無限のビットを必要とするので。
遅延評価とか使えばある程度ごまかせるかもしれないけど、
遅延評価つかっても無限集合の包含関係とかは計算不能な場合もあるので、無限集合は扱わない方向で。
内包的表記は有限集合だけに使えるようにするとか。
遅延評価とか使えばある程度ごまかせるかもしれないけど、
遅延評価つかっても無限集合の包含関係とかは計算不能な場合もあるので、無限集合は扱わない方向で。
内包的表記は有限集合だけに使えるようにするとか。
309デフォルトの名無しさん
2014/09/21(日) 20:27:48.01ID:WCtTxfaP ∞という数・文字をあつかえばいい。
{ 2n | n=1,・・,∞}は無限集合。
{ 2n | n=1,・・,∞}は無限集合。
310デフォルトの名無しさん
2014/09/21(日) 20:40:29.63ID:WCtTxfaP 無限大を扱うのも無限小を扱うのも似通ったもので。1/xで反転するので。
時空間で無限小を扱わない量子重力理論を思い出した。
時空の原子を追うループ量子重力理論 L.スモーリン(カナダ・ペリメター理論物理学研究所)
私たちは空間も時間も連続したものだと考えているが,実は大間違いかもしれない。
相対論と量子力学の統合を目指す新理論によると,「時空の原子」が存在する。
アインシュタインが果たせなかった難問解決の道筋が見えてきた。
量子力学と一般相対論の基本原理を注意深く組み合わせることで,「ループ量子重力理論」が生まれた。
この理論によると,空間は個別の小さな塊からできていて,最小の塊の体積はおよそ1立方プランク長(10-99cm3)だ。
時間の進みは飛び飛びで,その最小単位はおよそ1プランク秒(10-43秒)となる。
ループ量子重力理論は純粋に理論的な研究の成果だが,実際に検証できる可能性がある。
例えば,空間の構造が離散的だとすると,そこを伝わる光のスピードは波長によってわずかに異なる。
この観測が可能な天文衛星が計画されており,時空の離散的構造から生まれる効果が近い将来に確かめられるだろう。
http://www.nikkei-science.com/page/magazine/0404/loop.html
時空間で無限小を扱わない量子重力理論を思い出した。
時空の原子を追うループ量子重力理論 L.スモーリン(カナダ・ペリメター理論物理学研究所)
私たちは空間も時間も連続したものだと考えているが,実は大間違いかもしれない。
相対論と量子力学の統合を目指す新理論によると,「時空の原子」が存在する。
アインシュタインが果たせなかった難問解決の道筋が見えてきた。
量子力学と一般相対論の基本原理を注意深く組み合わせることで,「ループ量子重力理論」が生まれた。
この理論によると,空間は個別の小さな塊からできていて,最小の塊の体積はおよそ1立方プランク長(10-99cm3)だ。
時間の進みは飛び飛びで,その最小単位はおよそ1プランク秒(10-43秒)となる。
ループ量子重力理論は純粋に理論的な研究の成果だが,実際に検証できる可能性がある。
例えば,空間の構造が離散的だとすると,そこを伝わる光のスピードは波長によってわずかに異なる。
この観測が可能な天文衛星が計画されており,時空の離散的構造から生まれる効果が近い将来に確かめられるだろう。
http://www.nikkei-science.com/page/magazine/0404/loop.html
312デフォルトの名無しさん
2014/09/21(日) 20:49:08.07ID:WCtTxfaP 量子重力理論でフリードマン方程式に到達 ―築き上げられた「ミクロからマクロへの架け橋」
「ビッグバンの只中に何が起こっていたのか」ということについては、現行の物理学では説明を下すことができない。
この二つを統合させた「全方位的な」理論 が――量子重力理論が ――求められているところであり、研究が進められている。
この度、ドイツとカナダの研究チームによってPhysical Review Lettersに発表された重大な発見は、まさにこの路線に沿ったものだ。
発表された理論によれば、空間はこれ以上分割することのできない、ほんの小さな「土台、構成要素 (building blocks)≒ 素空間」からできているという。
この着想を出発点として彼らが到達したのは、宇宙論の方程式のなかでも最も肝要なものの一つとして見なされている「フリードマン方程式」だ。
今回の成果は、量子力学と相対論が実際に統合可能であるということを示している ――
http://livedoor.blogimg.jp/dogon23/imgs/a/4/a4fed584.jpg
アインシュタインによる一般相対性理論では重力が扱われており、言うなれば「マクロな世界」を一般的に記述するのが相対論だ。他方、量子力学が扱うのは原子や素粒子といったような「ミクロの世界」だった。
両理論ともに、それぞれの縄張りの領域では成功を収めてきたが、プランクスケールのような極限的な状況においては破綻してしまう、という難点が指摘されていた。
水が原子から構成されているのとまったく同じように、空間はある種の「原子」から ――素空間から ――構成されているのではないか、とOriti氏は想像している。
そして、二つの理論を統合することのできるような新たな理論ではこの「空間の原子」を記述することが切に求められるというわけであり、その理論が冒頭でも触れた「量子重力理論」だ。
アインシュタインの相対論では、時空は連続的なものとして捉えられている。
しかし、Oriti氏らによる数学的なタスクでは、空間を極小の「素空間」へと分解して、これに量子力学を適用させることが試みられた。
それにより空間に、ひいては空間を記述する相対論に量子力学を応用してみる、というのがチームの企てだった。
http://livedoor.blogimg.jp/dogon23/imgs/7/2/7207d807.jpg
http://blog.livedoor.jp/dogon23/archives/31545793.html
「ビッグバンの只中に何が起こっていたのか」ということについては、現行の物理学では説明を下すことができない。
この二つを統合させた「全方位的な」理論 が――量子重力理論が ――求められているところであり、研究が進められている。
この度、ドイツとカナダの研究チームによってPhysical Review Lettersに発表された重大な発見は、まさにこの路線に沿ったものだ。
発表された理論によれば、空間はこれ以上分割することのできない、ほんの小さな「土台、構成要素 (building blocks)≒ 素空間」からできているという。
この着想を出発点として彼らが到達したのは、宇宙論の方程式のなかでも最も肝要なものの一つとして見なされている「フリードマン方程式」だ。
今回の成果は、量子力学と相対論が実際に統合可能であるということを示している ――
http://livedoor.blogimg.jp/dogon23/imgs/a/4/a4fed584.jpg
アインシュタインによる一般相対性理論では重力が扱われており、言うなれば「マクロな世界」を一般的に記述するのが相対論だ。他方、量子力学が扱うのは原子や素粒子といったような「ミクロの世界」だった。
両理論ともに、それぞれの縄張りの領域では成功を収めてきたが、プランクスケールのような極限的な状況においては破綻してしまう、という難点が指摘されていた。
水が原子から構成されているのとまったく同じように、空間はある種の「原子」から ――素空間から ――構成されているのではないか、とOriti氏は想像している。
そして、二つの理論を統合することのできるような新たな理論ではこの「空間の原子」を記述することが切に求められるというわけであり、その理論が冒頭でも触れた「量子重力理論」だ。
アインシュタインの相対論では、時空は連続的なものとして捉えられている。
しかし、Oriti氏らによる数学的なタスクでは、空間を極小の「素空間」へと分解して、これに量子力学を適用させることが試みられた。
それにより空間に、ひいては空間を記述する相対論に量子力学を応用してみる、というのがチームの企てだった。
http://livedoor.blogimg.jp/dogon23/imgs/7/2/7207d807.jpg
http://blog.livedoor.jp/dogon23/archives/31545793.html
313デフォルトの名無しさん
2014/09/21(日) 22:44:17.86ID:eogfeBgw >>308
>無限集合は扱わない
>内包的表記は有限集合だけに使えるようにする
こういうのはどうするんだ?
p(a,b) : a,bは(0以外の)自然数で、aはbで割り切れる
としたとき、
{x|p(x,1)} = {1,2,3,…}
{x|p(1,x)} = {1}
>無限集合は扱わない
>内包的表記は有限集合だけに使えるようにする
こういうのはどうするんだ?
p(a,b) : a,bは(0以外の)自然数で、aはbで割り切れる
としたとき、
{x|p(x,1)} = {1,2,3,…}
{x|p(1,x)} = {1}
314デフォルトの名無しさん
2014/09/22(月) 01:03:15.50ID:SEYHtX5N315デフォルトの名無しさん
2014/09/22(月) 01:29:01.36ID:1b5tK9XE ZFC
316デフォルトの名無しさん
2014/09/22(月) 01:30:24.14ID:1b5tK9XE ブール代数
317デフォルトの名無しさん
2014/09/22(月) 01:32:50.90ID:1b5tK9XE 3値論理
3181
2014/09/22(月) 06:51:14.13ID:XoUFao4y319デフォルトの名無しさん
2014/09/22(月) 06:55:11.39ID:3ofAPdb2 >>318
では逆に、HaskellやPythonのリスト内包表記じゃダメな理由は?
では逆に、HaskellやPythonのリスト内包表記じゃダメな理由は?
3201
2014/09/22(月) 08:32:07.69ID:XoUFao4y 遅延評価が必要になる。
めんどくさい割に実用的じゃないと思う。
haskellの無限リストを使うときだって最後はtakeとか使って有限集合に落とすんでしょ?
めんどくさい割に実用的じゃないと思う。
haskellの無限リストを使うときだって最後はtakeとか使って有限集合に落とすんでしょ?
321デフォルトの名無しさん
2014/09/22(月) 11:31:48.61ID:mNTZ+4bu >>291
何の関係もない。
何の関係もない。
322デフォルトの名無しさん
2014/09/22(月) 11:34:43.17ID:mNTZ+4bu323デフォルトの名無しさん
2014/09/22(月) 12:49:44.48ID:jhj0pzxy > haskellの無限リストを使うときだって最後はtakeとか使って有限集合に落とすんでしょ?
takeのように単純な関数だとは限らない。
ゲーム木の探索の枝刈りのようなややこしい条件で止めたりするから意味がある。
まあただtwitterで、らくだの人と川の人が時々論戦しているように、デフォルトで
なんでもかんでも遅延か、遅延にしたいものだけ明示的に遅延にするのが良いのか?
は、まだ結論が出ていないとは思う。
takeのように単純な関数だとは限らない。
ゲーム木の探索の枝刈りのようなややこしい条件で止めたりするから意味がある。
まあただtwitterで、らくだの人と川の人が時々論戦しているように、デフォルトで
なんでもかんでも遅延か、遅延にしたいものだけ明示的に遅延にするのが良いのか?
は、まだ結論が出ていないとは思う。
324デフォルトの名無しさん
2014/09/22(月) 15:09:16.19ID:SUbucwZ9325デフォルトの名無しさん
2014/09/22(月) 16:52:16.32ID:4aSBsr7P 有限集合限定なら言語なんか作らずにライブラリで済むんじゃないか。
それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。
それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。
326デフォルトの名無しさん
2014/09/22(月) 17:18:16.63ID:LvPIFofq A. 無知ゆえに(ありきたりな)発想が溢れている人、行動力がある人
B. 知識でがんじがらめになって発想が死んだ人
たいがいこのどっちかに当てはまってしまう。そして結局このスレもAとBとの対立構造に終始して終わる。
B. 知識でがんじがらめになって発想が死んだ人
たいがいこのどっちかに当てはまってしまう。そして結局このスレもAとBとの対立構造に終始して終わる。
3271
2014/09/22(月) 18:14:10.47ID:XoUFao4y >>322
そういわれるとそんな気もしてきますね。
>>323
ゲーム木の探索で遅延評価使うとminmaxがαβになったりするんでしょうか。
さすがにそこまではない?
>>324
無限集合を使って生産性が上がる例があるなら教えてほしいです。
無限集合は面白い概念だけど扱いが難しい。
正直>>15のときは無限集合の実装の大変さの見通しが甘かったと言わざるを得ない。
>>325
>有限集合限定なら言語なんか作らずにライブラリで済むんじゃないか。
その可能性はありますね。
>それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。
Maximaは昔少しだけ触ったことあるけど色んな事が出来るっぽいですね。
素因数分解とかやらせてみたことあります。
>>326
まあ、最悪なにも形あるものは生み出せなくても私は勉強になってますけどね。
そういわれるとそんな気もしてきますね。
>>323
ゲーム木の探索で遅延評価使うとminmaxがαβになったりするんでしょうか。
さすがにそこまではない?
>>324
無限集合を使って生産性が上がる例があるなら教えてほしいです。
無限集合は面白い概念だけど扱いが難しい。
正直>>15のときは無限集合の実装の大変さの見通しが甘かったと言わざるを得ない。
>>325
>有限集合限定なら言語なんか作らずにライブラリで済むんじゃないか。
その可能性はありますね。
>それにライブラリ作らなくても、Maximaなら要求よりももっと複雑なこともできる。
Maximaは昔少しだけ触ったことあるけど色んな事が出来るっぽいですね。
素因数分解とかやらせてみたことあります。
>>326
まあ、最悪なにも形あるものは生み出せなくても私は勉強になってますけどね。
328デフォルトの名無しさん
2014/09/22(月) 19:40:23.96ID:3ofAPdb2 >>326
Aのほうが遥かにマシだな。
ありきたりでも行動していればそのうちありきたりじゃない発想が出る。
行動する人に対して既存の知識を振り回して笑うことしかできない奴は
いつまでたっても何もつくれない。
Aのほうが遥かにマシだな。
ありきたりでも行動していればそのうちありきたりじゃない発想が出る。
行動する人に対して既存の知識を振り回して笑うことしかできない奴は
いつまでたっても何もつくれない。
329デフォルトの名無しさん
2014/09/22(月) 20:07:25.83ID:SUbucwZ9330デフォルトの名無しさん
2014/09/22(月) 20:21:24.00ID:4th1shUN あたし中卒やからね 仕事をもらわれへんのやと書いた
女の子の手紙の文字は とがりながら震えてる
ガキのくせにと頬を打たれ 少年たちの眼が年をとる
悔しさを握りしめすぎた 拳の中 爪が突き刺さる
女の子の手紙の文字は とがりながら震えてる
ガキのくせにと頬を打たれ 少年たちの眼が年をとる
悔しさを握りしめすぎた 拳の中 爪が突き刺さる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 【広島】ペルー女性の国保加入を誤って認め、福山市が医療費484万円を肩代わりするミス…入院して手術を受ける [ぐれ★]
- 山田邦子 ひょうきん族時代の年収は12億円「ただ税金が80%」 [muffin★]
