関数型プログラミング言語Haskell Part34 (692レス)
1-

684
(1): 10/09(木)19:31 ID:XykzCJ/G(1) AAS
Haskellは遅延評価だからmapが配列を返してると言えるかあやしい

一般的な関数型言語だと末尾再帰で不必要になる値を再利用(上書き)する
あと値が変更されない(immutable)なら参照渡しで共有しても問題ないし
共有するためにimmutableにすると言っても過言ではない
685: 10/09(木)19:50 ID:j1OYGPg+(4/5) AAS
>>684
うん、遅延評価だから基本参照を返してるはず。バード本参照
(なので>>668を書いてみたわけで)

immutableなら

a = [1..4]
b = map (+1) [1..4]
print a
print b

とうコードで

output:
[0,1,2,3,4]
[1,2,3,4,5]

になるはず。
Cで参照を共有すると

[1,2,3,4,5]
[1,2,3,4,5]

という困った表示になってしまう。
というかHaskellでも生のリスト[0..4]とmap (+1) [0..4]は参照を共有してない。
共有してるのは[0..4]だけ。
(むしろ共有してないからこそ「富豪プログラミング」とか言われる)
686: 10/09(木)20:01 ID:j1OYGPg+(5/5) AAS
言ってみればHaskellは新しい参照をどんどん生み出して、不要になった参照はガンガンGCする。
Cはそういうプログラミングには(当たり前だが)向かないし、当たり前にCの方が効率は良い。
人間が書くコードはHaskellみたく数学に近いほど短くなる。
どっちが良いとかじゃなく、何を優先するかという話。
(なのだなぁと、Cでmap関数もどきを書いて再確認した)
687: 10/09(木)20:33 ID:N3YUsGEr(2/2) AAS
ループ書こうぜ
688
(1): 10/09(木)21:58 ID:HS++2zZ0(1) AAS
>>682
「ジェネリック等の抽象化機構を備えた言語であれば〜」のところ全然理解してなかったのな

>>683
言語の仕様上は値渡しだけど実際にわざわざコピーして渡す必要がない状況ならコンパイラが最適化してコピーしないマシンコード(コピーして渡すのと同じ結果になるマシンコード)を生成するという話
異なるレイヤーを混同してることに気づいてくれ

あとHaskellのリストは配列じゃないよ
689
(1): 10/10(金)05:32 ID:WzZmvOuY(1) AAS
Haskellを勉強したけど何に使えばいいのか分からない
関数型プログラミングで難しい割に、速度が出ないことがわかっているやっぱり速度は正義だろ
690: 10/10(金)07:17 ID:G/tXieG5(1/2) AAS
>>688
ジェネリックはそのうちC++なりJavaなりで試すけど、まだ試してもいないので…。

最適化の方はもうちょい具体的に教えて欲しいかも。
x = 2 * 100を x = 200にするみたいなのは知ってるけど、あんま詳しくない。
691: 10/10(金)07:21 ID:G/tXieG5(2/2) AAS
>>689
今のHaskellは(中の人がMSに勤め始めてから)C#並みに速くなってるけど、GUIライブラリとか軒並み遅い時代に開発が止まってる…。
しいて言えばYesod使ってWebアプリかな?
Mac(Appleシリコン)版があるからiOSアプリのロジック部分とかも行けそう。
692: 10/10(金)20:26 ID:OD0KmsJp(1) AAS
【移民】 は努力もせずに日本の豊かさを手に入れる
2chスレ:kankon

1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.010s