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

1
(1): 2021/12/17(金)12:57 ID:NPioGyUL(1/4)調 AAS
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/

前スレ
関数型プログラミング言語Haskell Part33
2chスレ:tech
595
(1): 2024/11/16(土)10:08 ID:9CYVpzbn(1)調 AAS
Category Theory Using Haskell
An Introduction with Moggi and Yoneda
Shuichi Yukita

という書籍が来月出るんですって?
596
(1): 2024/11/16(土)14:32 ID:Avgm411i(1/2)調 AAS
>>595
高いな

> Hardcover
> \36,125 Tax included
597: 596 2024/11/16(土)14:36 ID:Avgm411i(2/2)調 AAS
円記号がバックスラッシュになっていたので訂正
¥36,125

フォントによるわけだが
598: 2024/11/16(土)15:13 ID:ZnREBqGy(1)調 AAS
買って損するだけの高額本の予感
599: 2024/11/16(土)15:27 ID:x85mVkLf(1)調 AAS
なんだ雪田の本じゃねぇか
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
600: 2024/11/16(土)20:50 ID:ZUJ+jDQV(1/4)調 AAS
結局Moggiのアイディアがなんなのか書いてなかったから、洋書でも同じでしょ。
601: 2024/11/16(土)21:01 ID:UsNa54E4(1)調 AAS
すでに書かれてるのがwikipediaにあるじゃん
https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%AA%E5%9C%8F
602: 2024/11/16(土)21:18 ID:ZUJ+jDQV(2/4)調 AAS
wikiのは肝心のvalueとcomputationについてちゃんと書いてない。
computationの訳を「計算された値」とするのは微妙。
603: 2024/11/16(土)21:28 ID:ZUJ+jDQV(3/4)調 AAS
『圏論入門』の方にはvalueもcomputationも書いてなかったと思うから言わずもがな。
604: 2024/11/16(土)21:43 ID:HNcchqjT(1)調 AAS
出たら人柱になって買って読んで下さい
605: 2024/11/16(土)22:29 ID:MlIU4R6X(1)調 AAS
多分加筆してると思うよ
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
606: 2024/11/16(土)22:41 ID:ZUJ+jDQV(4/4)調 AAS
加筆してvalueとcomputationの説き起こしから始めて本当にMoggiのアイディア書くかなぁ?
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
607: 2024/11/17(日)08:11 ID:RK7ri1yG(1)調 AAS
レポよろ
608: 2024/11/17(日)09:07 ID:zx90fdBd(1)調 AAS
ぷりぷりです
609: 2024/11/17(日)14:35 ID:895B27h0(1/2)調 AAS
4万近く出してわざわざレポだけする奴なんているの?
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
610: 2024/11/17(日)19:34 ID:A63wUj4E(1)調 AAS
まぁそもそもHaskellで圏論持ち出す必要ないしな
生産性上がらないよ
611
(1): 2024/11/17(日)19:42 ID:bAlb8WtH(1)調 AAS
Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
612: 2024/11/17(日)20:00 ID:895B27h0(2/2)調 AAS
圏がグラフの拡張みたいな概念だったから、グラフ理論みたいに有用なプログラミングにつかえるアルゴリズムがあるんじゃないかってことでやってたように見えた。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
613: 2024/11/17(日)21:17 ID:U7PWp5lE(1)調 AAS
>>611
俺も行ってたわw
数学クラスターからの圏論マウントを喰らっていくのやめたがw
そういうやつ多いんじゃないか
614: 2024/11/20(水)04:56 ID:vcDCbnyw(1)調 AAS
プログラムは合成できないといけないって当然のことを、いちいち圏である必要があるとか言い換えるオレ天才だわー
615: 2024/11/20(水)18:55 ID:QVKMRnqI(1)調 AAS
https://dic.nicovideo.jp/a/%E9%A1%A7%E5%AE%A2%E3%81%8C%E6%9C%AC%E5%BD%93%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A0%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE
616: 2024/11/21(木)00:16 ID:r2/mXbdf(1/2)調 AAS
集合論と圏論の抽象度がもし同レベルならたしかに圏である必要はないな
必要ない情報は捨象されるべきだと言われれば何も反論できない

だから抽象化マウントは強いんだ
617: 2024/11/21(木)01:45 ID:bAf4oZLa(1)調 AAS
抽象化すればプログラムしにくいと思うけど
618: 2024/11/21(木)19:02 ID:fTdZV0pc(1)調 AAS
プログラムが圏になるためとかいうクソしょうもない理由がモナド導入の理由って本当か?
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
619: 2024/11/21(木)21:57 ID:r2/mXbdf(2/2)調 AAS
型構築子を導入すれば関手もモナドも勝手についてくる
型を必要とするすべての言語で同じことが言える
これも抽象化
620: 2024/11/28(木)10:04 ID:p2Q1UON9(1)調 AAS
haskellでスクレイピングがやりたいんだが
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
621: 2024/12/04(水)21:11 ID:D3PBVzJs(1)調 AAS
ディストリで全部パッケージ化してくれてるとは思えん
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが

もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
622: 2024/12/08(日)23:12 ID:G2o8fSXB(1)調 AAS
おおむね10^-300前後(-400乗は無理だった)精度の任意精度少数。
定義済みの中ではPico(10^-12)までは定義されてる。

下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。

import Data.Fixed

data E300

instance HasResolution E300 where resolution _ = 10^300

type F300 = Fixed E300
623: 2024/12/19(木)15:03 ID:NXRHTsH0(1)調 AAS
add (x,y) (a,b) = (x+a,y+b)
これをaddを定義せずにarrowで簡単にかく方法はありますか
624: 2024/12/19(木)16:15 ID:hCGKCs/t(1)調 AAS
arrowてなんすか
625: 2024/12/19(木)19:27 ID:gIJYmlNm(1)調 AAS
富士通のスマホ
626
(2): 2024/12/20(金)01:32 ID:/9ZUXmih(1/2)調 AAS
スマホでHaskellを簡単に書く方法はないかな
627
(1): 2024/12/20(金)02:01 ID:I9azuXSK(1)調 AAS
>>626
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
628: 2024/12/20(金)02:04 ID:/9ZUXmih(2/2)調 AAS
>>627
だまらっしゃい
俺がウザ絡みするのは良いけどアンタにレスつけてウザ絡みする権利はないんだよ
何故ならアンタは世界で一番価値のない存在だからね
629: 2024/12/20(金)15:54 ID:IOWVZ3it(1)調 AAS
スマホでHaskell書く必要ある?
ないよね
630: 2024/12/20(金)22:08 ID:uE9QxZQG(1)調 AAS
>>626
iOSならRaskellってアプリあるけど、開発止まって大分経つので画面がずれたりする…。
ideoneとかpaiza.IOとかのクラウドサービスが今のところは一番手軽かもね。
631
(1): 警備員[Lv.1][新芽] 01/08(水)22:25 ID:lvne7rNk(1)調 AAS
初学者のため、言葉の定義があいまいな部分はご容赦ください

IOモナドの純粋性についてですが(すでに言葉があやしい)、
実際に副作用が起こるのは、mainに束縛され実行されたり、ghciプロンプトからアクションを投入したときで
アクションを生成するまでは同じ入力に対してはつねに同一のアクションを出力するという意味で純粋であるという理解でよいでしょうか(まだ実行前なので、副作用は生じていない)

アクションを生成するまでが純粋

ただ、このときの純粋性の有り難みがさっぱり分からず…

純粋な関数が遅延評価などに有効なことや、副作用のある処理が >>= などで順序を拘束しなければならないことは分かるのですが
632
(1): 01/09(木)20:13 ID:xwwTGWUu(1/3)調 AAS
評価が全部終わった後じゃないと参照透明性が保証されない。
633
(1): 01/09(木)20:18 ID:xwwTGWUu(2/3)調 AAS
規制あったはずなんだけどなんか書き込めた。

アクションの生成が完了(コンパイルの終了)。この時点ではみんな純粋。

その後に、アクションの実行(プログラムの実行)が起こって入出力が出る。

アクションの生成時点まですべての関数が純粋関数だということは参照透明性が保証されるということで、ありがたみはその一点にあると思うが。
634
(2): 01/09(木)21:49 ID:31eIYKLT(1)調 AAS
異教徒は汚染物として分離隔離する思想
635
(1): 警備員[Lv.2][新芽] 01/09(木)22:58 ID:vav7Znkh(1)調 AAS
>>632-633
ありがとうございます >>631 です

あくアクションの生成までが純粋、でよいことを確認させていただきました

でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと

>>634 にある分離隔離のような、何かこう、これまでとは違う何かがあるはず…と、浅知恵で考えるから訳が分からないのです…
636: 01/09(木)23:09 ID:2G6IUNoe(1)調 AAS
>>634
おパンツ分解されたオペラッドのおパンツの中で脱糞してもズボンの裾のお股のどっち側からウンコが転げ出てくるのかわかんないだけかと思ってた。
637
(1): 01/09(木)23:34 ID:xwwTGWUu(3/3)調 AAS
>>635
>でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと

だから参照透明性の保証だって。オブジェクトファイルとしては状態変化とかしているけれど、元のHaskellコードとしては参照透明性は保たれている、そこがすごいということなんだし。
逆に普通のオブジェクトファイルと全く違うなんてことありうると思う?同じコンピュータ上で動くんだからオブジェクトファイルとしては変わらんだろ。
638
(1): 警備員[Lv.5][新芽] 01/10(金)09:27 ID:N8eMPB8m(1/3)調 AAS
>>637
レスをありがとうございます

参照透過性の保証、ですね
アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか

まだ本の上の字面を追って学んでいるだけで圧倒的にコーティング量が足りない状態なので、これから経験を積むうちにいつかスッと腑に落ちるときがくるのかもしれません
639: 01/10(金)10:01 ID:xLB3XHZu(1)調 AAS
必要呼び評価戦略を採用するための前提として、すべての式の参照透過性が要求されるというだけでは
640
(1): 01/10(金)18:54 ID:X+hiLHcK(1/5)調 AAS
>>638
>アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか

?なんか混乱しているんじゃないか。
アクションの生成時点でのHaskellコードの参照透明性と、オブジェクトコード実行の際の参照の処理は別物だぞ。
641
(1): 01/10(金)18:59 ID:X+hiLHcK(2/5)調 AAS
補足:
Haskellコンパイルは少なくとも次の二つの段階を持つ
1.アクションの生成(入出力指示書の生成、Haskellコードの字面のコンパイル)
2.アクションの実行

1.のアクションの生成時に参照透明性がHaskellコードとして保証されている。
アクションの生成で必要な参照行為は全て終わっているので、2.では入出力だろうが破壊的操作だろうがやっても文句を言われない。

IOの機構がすごいのは1.アクションの生成計算で参照透明性が保証されているというところがうれしいところ、だという話。
642: 01/10(金)19:16 ID:NIbIyPdh(1)調 AAS
一度死んだら復活は有り得んので注意な
643
(3): 警備員[Lv.7][新芽] 01/10(金)19:39 ID:N8eMPB8m(2/3)調 AAS
>>640-641
レスをありがとうございます

そうですね
表現がいけませんでしたが、そのように理解しています

あとひとつ伺いたいのが(アドバイスいただいたことがまだちゃんと理解できたわけではないのでアレですが)、
参照透明性が担保されているとは、(1.アクションを生成する時点までは)副作用がある処理は書くことができない、ということでしょうか
644
(1): 警備員[Lv.7][新芽] 01/10(金)19:48 ID:N8eMPB8m(3/3)調 AAS
>>643 ですが、
このレスはちょっと意味が分かりませんね
実行前なので副作用は怒りようがありませんね
645: 01/10(金)20:01 ID:X+hiLHcK(3/5)調 AAS
>>643-644
そのように理解しています。って本当に理解してるか?

アクションの生成において生成しているのは入出力の指示書みたいなもので入出力自体はない。
こういう入力があったらこういう計算方法でこういう出力をするみたいな手順を生成しているだけ。

なんで参照透明性が担保されているというところでそんな引っかかるんだ?
646: 警備員[Lv.7][新芽] 01/10(金)20:34 ID:0gelnbg2(1/2)調 AAS
>>643 で確認したかったことは次のようなことでした

アクションを生成する段までは副作用なく、同一のプログラムを入力とすれば、かならず同一のアクションが出力されるか
ということでした

それはそうであるように思います
647: 01/10(金)20:42 ID:X+hiLHcK(4/5)調 AAS
同一のプログラムを入力とすればってどういう意味?
前も言ったようにアクションの生成とアクションの実行は別フェーズ。同一のアクションが出力される、というのはどっちのフェーズでのことを言ってんの?
648: 警備員[Lv.8][新芽] 01/10(金)21:16 ID:0gelnbg2(2/2)調 AAS
アクションが出力される、なので 1.です
649
(1): 01/10(金)21:34 ID:X+hiLHcK(5/5)調 AAS
なんか理解しているのかすごい怪しいなぁ。

一応回答しておくと、アクションの生成のフェーズなら参照透明性を保証された純粋関数の計算でしかないから
main文が同じなら当然同じアクションが生成される。
同じプログラムなら生成されるものも同じという意味で。

理解してたらこんな話出てこないと思うんだけど。
650: 警備員[Lv.1][新芽] 01/10(金)22:49 ID:/2hXYNXu(1)調 AAS
>>649
重ね重ね、ありがとうございます

理解できているかいなかについては、理解が浅いため、確認のために伺わせていただいています

伝わりづらくて申し訳ありませんでしたが、>>649の内容のような理解で正しいかを確認したかったというのが趣旨でした
簡潔に表現していただいて助かりました
651: 01/13(月)17:46 ID:uTEEqnKb(1)調 AAS
あけなしておめでとうございます
去年は多様性がようやく否定され始めた年ですが、
今年はhaskellの純粋主義のやうに分類・隔離・排除躍進の年となるようがんばりましょう
652: 01/15(水)00:44 ID:O9bWSOqU(1)調 AAS
マクロな現象には個々人のばらつきを否定する力はない
逆に個人は10回連続でグーを出してみてもたとえば「正規分布に従う」とかなんとかいう法則を反証できない

ミクロとマクロを隔離したのはただの統計学であって純粋でも主義でもない
653: 01/15(水)05:29 ID:QElBeHY8(1)調 AAS
誰もいまミクロ・マクロの話なんてしてないぞ
654: 01/21(火)22:22 ID:QQz8h7YM(1)調 AAS
雪田の英語版買って読んだ勇者はおらんか?
655: 01/22(水)01:14 ID:SDQT/604(1)調 AAS
3万も出してよもうとは思わない。

目次読むとKleisli tripleの節はあるのにKleisli categoryの節がなかったり、なぜかその後にMoggi's theoryが出てきたりと
少なくとも構成があんまりいい感じはしない。
656: 01/22(水)03:57 ID:ydcqGqD9(1)調 AAS
まぁ圏論はHaskellやるうえで無駄だしな
657: 01/23(木)21:00 ID:j8NlocC3(1)調 AAS
しかもHaskell自体やるだけ無駄だしな
658: 02/13(木)07:10 ID:NHs8kkcw(1)調 AAS
wikiでghc見たら、中の人MSリサーチにいるのな。
最近C#並みに速くなったと思ったら、そういう事か。
納得。
659
(1): 02/13(木)13:53 ID:LmH89MFs(1/2)調 AAS
暗記系の問題が嫌われるのは答えを隠す意味がないからだが
逆に陰謀論が大人気なのは、隠蔽する動機があるからかもしれない
660: 02/13(木)19:59 ID:8vmF21CT(1)調 AAS
>>659
誤爆か?
次から気をつけな
661: 02/13(木)21:57 ID:FvaixK+o(1)調 AAS
わざとだろ。
数板に延々スレ違を書き込む基地外がいるが多分そいつと同一。
662: 02/13(木)22:11 ID:LxUFvhMj(1)調 AAS
ワードサラダくん数学板にもいるんか
まあいそうな板だな
663: 02/13(木)23:39 ID:LmH89MFs(2/2)調 AAS
有意味な事実と有意味なデマを隔離するのは難しいらしい
だが、真でも偽でもないナンセンスはなぜか瞬時に判断できる
664: 03/19(水)11:03 ID:JUfTLTVZ(1)調 AAS
IntSetのsizeがO(1)じゃなくO(n)なのはなぜですか、O(1)で実装できそうなもんですが
665: 03/19(水)19:45 ID:4qyoYSYb(1)調 AAS
unionとかで重複要素数えるのが面倒だから必要になるまで数えない
666: 03/19(水)20:51 ID:S6mpqhEQ(1/2)調 AAS
私は最強ーーすき
667: 03/19(水)20:52 ID:S6mpqhEQ(2/2)調 AAS
誤爆スマソ。懐メロチャンネルと間違えた
668
(4): 10/08(水)08:47 ID:66xUgFQM(1/2)調 AAS
int* map(int (*f)(const int), const int* array, const int n){
  int* p = malloc(sizeof(int) * n);
  for(int i = 0; i < n; i++) p[i] = f(array[i]);
  return p;
}

ふむ、メモリ管理が必要な言語が(見かけ上)副作用のない関数を作ろうとしたら配列を返す関数の時点で関数を使った後は必ずメモリの開放が必要になるのか。
開放が必要だから、参照を持つためにポインタへの保存が必須なので、関数の連続適用(関数合成)は絶望的。

これじゃ、GCやRustみたいな仕組みが必要になるわけだ。
669: 10/08(水)10:40 ID:qRy2t+J8(1)調 AAS
Cで副作用はいうてらんないね。マルチスレッド、再入可能にするところまで出来れば上出来
670
(1): 10/08(水)13:07 ID:4LSFWHe4(1)調 AAS
>>668
30点の理解
671
(2): 10/08(水)14:05 ID:JTvRYaZp(1)調 AAS
GC言語はGC使ってる時点で副作用あるやんw
メモリ管理他人任せにしてるだけだ
672: 10/08(水)17:42 ID:1ctt2fBW(1)調 AAS
>>671
−30点
673
(1): 10/08(水)18:32 ID:66xUgFQM(2/2)調 AAS
>>670
100点満点のご高説をどうぞ。
長文になっても良し。

>>671
実は純粋関数型言語の定義は「副作用も含めて参照透明性が破れていない」なのです。(Wiki調べ)
print関数やgetLine関数はどう見ても副作用有るでしょう?
でも、モナドのお陰で参照透明性は破れてないんですよ。
674: 10/08(水)18:44 ID:N7mcxj5n(1)調 AAS
副作用は隔離スレへ
675: 10/08(水)18:45 ID:HFQA1hQ+(1)調 AAS
なるほどモナドと書き込めばこのスレで副作用の話もできるのですね
676
(1): 10/08(水)23:41 ID:jkiZK6Mq(1)調 AAS
>>673
ゴールがわからないので100点のご高説は無理だが30点の理由は説明しといてあげる

C言語という特定の言語実装における制約がメモリ管理が必要な言語全般に対しても当てはまると考えてるのが根本的な間違い

>配列を返す関数の時点で関数を使った後は必ずメモリの開放が必要になるのか。
>>668のコードで(明示的な)メモリ解放が必要になるのはヒープに動的にメモリをアロケートしたからであって配列を返すからではない

C言語では配列がfirst classではないので配列をそのまま返すことは不可能
C言語でも構造体ならfirst classなので配列という概念を表現した構造体を作って静的配列を返すようにすれば(明示的な)メモリ開放は不要
C言語にはないがジェネリック等の抽象化機構を備えた言語であれば静的配列を使って任意長の配列に対するmap関数も書ける

>開放が必要だから、参照を持つためにポインタへの保存が必須
動的にアロケートするものは実行時になるまで必要なメモリサイズがわからないから言語に関係なくポインタ的なものでしか表現しようがない
動的にアロケートしたものだからポインタが必須、ヒープに動的にアロケートしたものだから後で(明示的な)開放が必要なのであって、開放が必要だからポインタへの保存が必須という因果関係ではない
677
(2): 10/09(木)02:23 ID:j1OYGPg+(1/5)調 AAS
>>676
確かにメモリ管理が必要な手続き型言語全般というのは広げすぎたかもしれない。
静的な配列を関数内で作ってポインタを返す形で作ると関数を抜ける際に配列の寿命が尽きる。
(通常、それを避けるために結果を格納するためのポインタを引数で渡す)

C言語で関数型言語のmap関数みたいな配列を返す関数が作れるか?と考えると動的に作って、使い終わったら解放する形になるのかなと。
ここへの書き込みが長すぎると怒られたので削除したが、構造体で包むという案も考えた。
値渡しだからコピーコストがかさむ。
参照渡しだと生の配列と同じ寿命の問題に突き当たる。
678
(2): 10/09(木)10:26 ID:DbxsJTmB(1)調 AAS
>>677
>値渡しだからコピーコストがかさむ。
コンパイラの最適化で不必要なコピーは消える
C言語でもそういうことは当たり前にやってる
679: 10/09(木)11:59 ID:4MZdWW58(1)調 AAS
仕様化されてるっけ
コンパイラの実装次第だと怪しい
680: 10/09(木)17:36 ID:jE8FE7Nk(1)調 AAS
Cに何を求めてんだよw
681: 10/09(木)17:53 ID:N3YUsGEr(1/2)調 AAS
OS開発ですね。メモリも割り込みも何でも見えてしまい、扱わないといけません
682
(1): 10/09(木)18:19 ID:j1OYGPg+(2/5)調 AAS
>>678
にゃんと!?
それを押してもいざ実装してみたら
構造体で配列を包む場合、あらかじめ配列の長さを決めないといけなかった。

struct {
    int array[1024];
    int size;
}typedef Array;

この1024とかも余分な分は最適化で無くなるっていうなら10万位要素があっても大丈夫なように1GB位(見かけ上)確保したいが、そうでないなら大体の場合、無駄な領域を確保してることになる。
683
(1): 10/09(木)18:28 ID:j1OYGPg+(3/5)調 AAS
>>678
ん、まてよ?
最適化で不要なコピーは消えるって言っても、関数プログラミングのmap関数と同じ動きなら、参照元の値は変わったらダメなので参照渡しされたら困るんだが、どんな最適化でコピー(値渡し)で無く、かつ参照渡しでもない状態ってどんな状態?
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

693: 10/11(土)22:42 ID:pZv0dAV3(1/2)調 AAS
22 template <typename T>
23 vector<T> map(function<T(T)> f, const vector<T> arr){
24 vector<T> temp;
25 for(auto i : arr) temp.push_back(f(i));
26 return temp;
27 }
694: 10/11(土)22:43 ID:pZv0dAV3(2/2)調 AAS
C++で書いてみた。
今回は値渡しにしたけど、本当に最適化でコピーにならないようにできるのかな…。
そもそもどうやってそれを確認するんだろう?
本当なら参照渡しがほぼ要らなくなるけど。
そして、例によって参照渡しだと>>668やコードこそ書いてないがCで一般的な>>677のカッコ内に書いた(通常、それを避けるために結果を格納するためのポインタを引数で渡す)になる。

コードにするとこう。
(Haskellerなのでmapにしたけど、C++だとmapって連想配列なのね。失敗した…)

void map(vector<int>* input, vector<int>* output);

配列と比べて長さを引数に渡さないで良くなるのと、realocしなくても長さを変更できる点が進化しているが。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.020s