関数型プログラミング言語Haskell Part34 (692レス)
前次1-
抽出解除 レス栞

67: デフォルトの名無しさん [] 2022/02/04(金) 08:30:39.02 ID:iaw7RH3I(1) AAS
完全に荒らしやろあれ
468: デフォルトの名無しさん [] 2024/10/04(金) 19:23:08.02 ID:tixO3LDq(1/22) AAS
とりあえず続きを書いてみる。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。

ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。

ただし、ここで入出力プログラム prog は A型の引数を取って(computationの整理をする前は)B型の返り値を返すとする。
514: デフォルトの名無しさん [] 2024/10/04(金) 23:41:03.02 ID:tixO3LDq(22/22) AAS
すまんね。準備不足だったわ。詰めるところわかったし、
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
565: デフォルトの名無しさん [sage] 2024/10/28(月) 17:13:55.02 ID:B1OBTGXf(1/2) AAS
10年前のtwitterでは鉄板ジョークでしたよ
すごいH
611
(1): デフォルトの名無しさん [sage] 2024/11/17(日) 19:42:07.02 ID:bAlb8WtH(1) AAS
Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
666: デフォルトの名無しさん [] 2025/03/19(水) 20:51:01.02 ID:S6mpqhEQ(1/2) AAS
私は最強ーーすき
685: デフォルトの名無しさん [] 2025/10/09(木) 19:50:16.02 ID:j1OYGPg+(4/5) AAS
>>684
684(1): デフォルトの名無しさん [sage] 2025/10/09(木) 19:31:35.47 ID:XykzCJ/G(1) AAS
Haskellは遅延評価だからmapが配列を返してると言えるかあやしい

一般的な関数型言語だと末尾再帰で不必要になる値を再利用(上書き)する
あと値が変更されない(immutable)なら参照渡しで共有しても問題ないし
共有するためにimmutableにすると言っても過言ではない
うん、遅延評価だから基本参照を返してるはず。バード本参照
(なので>>668
668(3): デフォルトの名無しさん [] 2025/10/08(水) 08:47:56.03 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みたいな仕組みが必要になるわけだ。
を書いてみたわけで)

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]だけ。
(むしろ共有してないからこそ「富豪プログラミング」とか言われる)
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s