計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
探検
集合論に基づいた言語を作りたい
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/08/10(日) 21:27:16.56ID:x7G32Sd0202デフォルトの名無しさん
2014/09/09(火) 10:33:24.25ID:iSgMgqSE203デフォルトの名無しさん
2014/09/09(火) 14:38:16.53ID:ukX/qMIS204デフォルトの名無しさん
2014/09/09(火) 23:09:21.92ID:u4pMEKRn >>201
ほう、「>>158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている」のか、それは知らなんだ
関数型を名乗る言語の大半では(=少なくとも自分の知る限りすべての関数型言語では)、
始祖 Lisp の時代から本質的に永続性を持つリストと呼ばれるデータ構造を基本としている
だから関数型言語では、普通に(=暗黙のうちに)永続データ構造が使われていると言える(>>172)
一方、手続き型言語で基本的なデータ構造といえばレコード(=構造体)と配列だと思うけど、
>>201の住んでいる異次元世界では、レコードや配列が永続データ構造で実装されているんだね
興味深い話だから、ぜひ kwsk 説明してもらえると嬉しいなあ....(棒
ほう、「>>158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている」のか、それは知らなんだ
関数型を名乗る言語の大半では(=少なくとも自分の知る限りすべての関数型言語では)、
始祖 Lisp の時代から本質的に永続性を持つリストと呼ばれるデータ構造を基本としている
だから関数型言語では、普通に(=暗黙のうちに)永続データ構造が使われていると言える(>>172)
一方、手続き型言語で基本的なデータ構造といえばレコード(=構造体)と配列だと思うけど、
>>201の住んでいる異次元世界では、レコードや配列が永続データ構造で実装されているんだね
興味深い話だから、ぜひ kwsk 説明してもらえると嬉しいなあ....(棒
205デフォルトの名無しさん
2014/09/09(火) 23:32:43.42ID:iSgMgqSE 見事に知ったかが消えたな
206デフォルトの名無しさん
2014/09/10(水) 07:01:46.89ID:nz1QrfPP >>204
知らないって、幸せなことなんだなあw
ある言語で永続データ構造が使えるからといって、
その言語の全てのデータ型が永続データ構造で実現されていることにはならないことぐらい
中学生レベルの論理を知っていればわかりそうなものなんだけどなあw
copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて
そこにはLISPで培われた永続データ構造の技術が使われてるよ。
知らないって、幸せなことなんだなあw
ある言語で永続データ構造が使えるからといって、
その言語の全てのデータ型が永続データ構造で実現されていることにはならないことぐらい
中学生レベルの論理を知っていればわかりそうなものなんだけどなあw
copy on write的なデータ構造は多くの手続き型言語のライブラリで使われていて
そこにはLISPで培われた永続データ構造の技術が使われてるよ。
207デフォルトの名無しさん
2014/09/10(水) 11:12:44.60ID:2lSvEqyn どんどん言ってることがズレてくな
208デフォルトの名無しさん
2014/09/10(水) 11:51:44.84ID:2N2PVK/b 関数ムラの住民は世間が狭いね
209デフォルトの名無しさん
2014/09/10(水) 22:45:00.45ID:MIzNsnl2210桃白白 ◆9Jro6YFwm650
2014/09/10(水) 22:56:17.03ID:6zdXUVOl >>209
Stringとか
Stringとか
211デフォルトの名無しさん
2014/09/10(水) 23:05:15.07ID:MIzNsnl2212桃白白 ◆9Jro6YFwm650
2014/09/10(水) 23:08:58.07ID:6zdXUVOl213デフォルトの名無しさん
2014/09/10(水) 23:20:47.47ID:MIzNsnl2 >>212
単純型とは、他の型から構成されることのないデータ型であり、
文字列型の他には、論理型、文字型、列挙型、数値型がある
関数型言語の Lisp や論理型言語の Prolog だとアトムとも呼ばれる
単純型とは、他の型から構成されることのないデータ型であり、
文字列型の他には、論理型、文字型、列挙型、数値型がある
関数型言語の Lisp や論理型言語の Prolog だとアトムとも呼ばれる
214桃白白 ◆9Jro6YFwm650
2014/09/10(水) 23:22:03.29ID:6zdXUVOl >>213
他の型から構成されることがないってどういう意味っすか?
他の型から構成されることがないってどういう意味っすか?
215デフォルトの名無しさん
2014/09/10(水) 23:32:19.53ID:MIzNsnl2216デフォルトの名無しさん
2014/09/10(水) 23:45:56.12ID:ADC46RWM 単純型‥もう、アーキュムレータとかその他レジスタに載る型、ということにしては?
217デフォルトの名無しさん
2014/09/11(木) 06:06:05.80ID:/5wQig/e >>211
Stringが内部データ構造を持っていたりライブラリで提供されている言語や処理系なんて山ほどあるだろ。
StringがCharのリストとして実現されている言語や処理系も多い。
関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw
Stringが内部データ構造を持っていたりライブラリで提供されている言語や処理系なんて山ほどあるだろ。
StringがCharのリストとして実現されている言語や処理系も多い。
関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw
218デフォルトの名無しさん
2014/09/11(木) 10:27:37.46ID:ZRdF18oF >>217
関数型でもCharのリストで扱う言語あった気が
関数型でもCharのリストで扱う言語あった気が
219デフォルトの名無しさん
2014/09/11(木) 12:11:59.58ID:/5wQig/e むしろStringが単純型なのはLISP系ぐらいでは
220デフォルトの名無しさん
2014/09/11(木) 12:59:06.68ID:ThP8Tlio >>216 型理論(型システム)的には全く無意味だからそれ
221デフォルトの名無しさん
2014/09/11(木) 12:59:52.98ID:ThP8Tlio > 関数ムラの住民はやっぱりムラの外の事情には疎いんだね。よーーーーくわかりましたw
自分がバカっぷりをさらしてることはわからないんだねw
自分がバカっぷりをさらしてることはわからないんだねw
222デフォルトの名無しさん
2014/09/11(木) 13:06:24.74ID:ThP8Tlio ていうか、関数型ムラに居て、HaskellのStringが[Char]だと知らない奴がいるもんかw
あと、流石に効率が悪いことも多いってんで、最近はText型とその周辺の実装が進められてる。
あと、流石に効率が悪いことも多いってんで、最近はText型とその周辺の実装が進められてる。
223デフォルトの名無しさん
2014/09/11(木) 13:39:24.40ID:/5wQig/e ハァ?誰もHaskellの話なんてしていないぞ。
そんなにHaskellの話がしたければHaskellスレに行けば?
「Stringは単純型だと言ったらいじめられた〜」とか言えば
みんな同情してくれるだろw
そんなにHaskellの話がしたければHaskellスレに行けば?
「Stringは単純型だと言ったらいじめられた〜」とか言えば
みんな同情してくれるだろw
224デフォルトの名無しさん
2014/09/11(木) 14:10:25.16ID:AMEA56Qh 桃白白はVBScriptしか知らないからあの答えで合ってるの。
225デフォルトの名無しさん
2014/09/11(木) 17:15:48.36ID:ThP8Tlio > みんな同情してくれるだろw
おれは苛めてるんだ、と、自分を騙すのに必死なのかw
おれは苛めてるんだ、と、自分を騙すのに必死なのかw
226デフォルトの名無しさん
2014/09/11(木) 17:18:44.69ID:Eq/MhJWf Stringが単純型しかないLisp以外の言語まだー?
227デフォルトの名無しさん
2014/09/11(木) 19:02:59.76ID:ZRdF18oF Stringがプリミティブな言語自体は存在するけど(手続き型ならBASICとかPerlとか)
>>211 はStringは単純型、と言い切っちゃってるからな
>>211 はStringは単純型、と言い切っちゃってるからな
228デフォルトの名無しさん
2014/09/11(木) 20:03:48.12ID:Eq/MhJWf しかもBASICやPerlにしても文字列を内部実装として永続データ構造で保持してる処理系とか普通にあり得るし。例えばPerlのHaskell実装とか。
229デフォルトの名無しさん
2014/09/12(金) 00:22:55.80ID:ke/j7I6c で?
230デフォルトの名無しさん
2014/09/12(金) 02:10:37.29ID:KXHcVpz6 元々なんの話だったんだっけか、よく分からんくなってきた
231デフォルトの名無しさん
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があると細々としたことまで、
少ないコード量で強く型付けできることが分かるはず。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 731部隊の新資料、中国が公開 「日本が細菌戦の罪を自白」と主張 ロシアが引き渡し [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★8 [ぐれ★]
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 【実況】博衣こよりのえちえちダンガンロンパ4🧪
- 🏡パン🍞つー✌まる👌見え👊😅👊
- 千晴!😡
- 俺のチンコが真っ赤に燃えるぅ!
- 【実況】博衣こよりのえちえちダンガンロンパ3🧪
- 【緊急高市朗報】WBC全試合、地上波完全生放送決定wmwmwmwmwmwmwmwmwmwmwmwmwmwmwmw [517459952]
