計算機科学の基礎は集合論であるという。
ならば、集合論に基づいた言語を作れば美しい言語になるのでは?
そんな発想から徹底的に集合論的思想で言語仕様を考えるスレです。
探検
集合論に基づいた言語を作りたい
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/08/10(日) 21:27:16.56ID:x7G32Sd0188デフォルトの名無しさん
2014/09/08(月) 18:04:23.92ID:pVr2+nKJ >>187
関数型プログラミングは本当に難しいのか
http://itpro.nikkeibp.co.jp/article/Watcher/20121001/426555/?ST=smart
『関数型言語』を使ってはいけない」との発言が飛び出したのだ。
関数型プログラミングは本当に難しいのか
http://itpro.nikkeibp.co.jp/article/Watcher/20121001/426555/?ST=smart
『関数型言語』を使ってはいけない」との発言が飛び出したのだ。
189デフォルトの名無しさん
2014/09/08(月) 18:23:47.23ID:kaEhSBtj 純粋関数型はプログラマの技法のためでなく
コンパイラ、ハードウェアのためだろ。
プログラマにとっては使いにくいが、
手続き、順序がないことで、機械が並列処理しやすい。
順序があると、先の手続きが終わるまで待たないといけない。
コンパイラ、ハードウェアのためだろ。
プログラマにとっては使いにくいが、
手続き、順序がないことで、機械が並列処理しやすい。
順序があると、先の手続きが終わるまで待たないといけない。
190デフォルトの名無しさん
2014/09/08(月) 19:14:00.85ID:cPc63HcT191デフォルトの名無しさん
2014/09/08(月) 19:20:10.71ID:kaEhSBtj プログラマのためなら、手続き型も使える関数型、関数型もも使える手続き型というハイブリットのほうがよく
厳しい制約をつけることはない。値の書き換え不可能は便利でない。
厳しい制約をつけることはない。値の書き換え不可能は便利でない。
1921
2014/09/08(月) 19:36:06.54ID:ZbTP8aJt いつの間にか関数型言語スレになってしまったな。
まあ寄り道もいいか。
まあ寄り道もいいか。
1931
2014/09/08(月) 20:53:29.01ID:ZbTP8aJt 無知をさらすようだけど、チューリングマシンで一回テープに書き込んだらそのメモリは書き換えられないマシンがあったら、それはチューリング完全になる?
194デフォルトの名無しさん
2014/09/08(月) 21:12:35.82ID:0BEKcfFo 直感的には、規則は面倒になりそうだけど「テープはいくらでもある」というのが
チューリングマシンの前提だから、問題ないんじゃない?
チューリングマシンの前提だから、問題ないんじゃない?
1951
2014/09/08(月) 21:17:06.30ID:ZbTP8aJt 直感的にはそうなんだけど、じゃあ一回しかメモリに書き込めないマシンでチューリングマシンをシミュレートしてみろって言われると俺には無理。
196デフォルトの名無しさん
2014/09/08(月) 21:53:22.17ID:YW1sNfFx >>186
そういう先生は先生として失格なので無視していい
そういう先生は先生として失格なので無視していい
197デフォルトの名無しさん
2014/09/08(月) 23:28:07.41ID:0BEKcfFo てゆーか、文脈を無視して取り出すな危険、系だろ
198デフォルトの名無しさん
2014/09/08(月) 23:46:25.48ID:nnXcaq6b >>180
ナゼ突然に Haskell という名前を出すのか意味不明だなぁ
不変オブジェクトによる計算は、ML や Lisp のように破壊的代入が可能な
不純関数型言語でも重要な概念であり、基本のプログラミング・スタイルだよ
特に>>159のプレゼン内で紹介されているオカサキ氏の書籍では、
すべてのコードが Standard ML で書かれているのに、いったい何を言いたいのだろう?
おそらく>>180の頭の中には「関数型言語 == Haskell」という等式が
あるんだと思うけど、>>180のようにあらゆる関数型言語がHaskellに見えてしまう
ニワカな自称Haskellプログラマを指して「ハスケラ」と呼ぶんだがね
ナゼ突然に Haskell という名前を出すのか意味不明だなぁ
不変オブジェクトによる計算は、ML や Lisp のように破壊的代入が可能な
不純関数型言語でも重要な概念であり、基本のプログラミング・スタイルだよ
特に>>159のプレゼン内で紹介されているオカサキ氏の書籍では、
すべてのコードが Standard ML で書かれているのに、いったい何を言いたいのだろう?
おそらく>>180の頭の中には「関数型言語 == Haskell」という等式が
あるんだと思うけど、>>180のようにあらゆる関数型言語がHaskellに見えてしまう
ニワカな自称Haskellプログラマを指して「ハスケラ」と呼ぶんだがね
199デフォルトの名無しさん
2014/09/08(月) 23:54:48.92ID:nnXcaq6b200デフォルトの名無しさん
2014/09/09(火) 05:57:09.86ID:ukX/qMIS 単に172みたいなシッタカはハスケラが多いという経験則なんじゃね?
実際、シッタカ多いだろ、ハスケラ界隈。
実際、シッタカ多いだろ、ハスケラ界隈。
201デフォルトの名無しさん
2014/09/09(火) 06:01:06.48ID:ukX/qMIS つーか、158に書いてある程度の永続データ構造は
不純関数型どころか手続き型でも普通に使われている。
それをいちいち関数型特有の技術であるかのように言いふらすのか。
ルビ厨と同類だなw
不純関数型どころか手続き型でも普通に使われている。
それをいちいち関数型特有の技術であるかのように言いふらすのか。
ルビ厨と同類だなw
202デフォルトの名無しさん
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でコーディングされた実用的で有名なアプリがあれば教えてほしいです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★12 [蚤の市★]
- 中国の渡航自粛要請1カ月 大阪の観光バス予約ゼロ、東北にも波及 [蚤の市★]
- 【神戸】エレベーター「かご」なく男性医師が転落死 大手「三菱電機ビルソリューションズ」の担当者、安全装置切り放置か [ぐれ★]
- 不倫疑惑の永野芽郁さん、CM削除ドミノの違約金“やはり発生は免れない”可能性 約10億円になる見込み、本人は全額支払う覚悟 [牛丼★]
- 女性天皇「賛成」69%、将来の皇位継承「不安」68%…読売世論調査 [蚤の市★]
- 【日本人の旅行離れ】国内旅行すら行けなくなった……オーバーツーリズムだけじゃない 旅行者減少の異常事態 [ぐれ★]
- 高市、メガソーラー廃止。環境破壊が社会問題化 [792147417]
- 日本人がホルホルの対象にしている生物、海外にも生息すると判明 [603416639]
- 無責任な大人が「不登校でいいんだよ」とか言ってるけどさ
- 【悲報】ドイツ人「なんで日本人って自炊するの?出来合の惣菜や冷食食った方が楽でコスパいいやん。そんなんだから低生産性なんだよ [786648259]
- 底辺テイカー気質Vtuberを破壊する遊びが闇深いと話題に [922647923]
- 🏡おい!返事しろ︎︎!知的障害者!
