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

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: 10/08(水)23:41 ID:jkiZK6Mq(1) AAS
>>673
ゴールがわからないので100点のご高説は無理だが30点の理由は説明しといてあげる

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

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

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

>開放が必要だから、参照を持つためにポインタへの保存が必須
動的にアロケートするものは実行時になるまで必要なメモリサイズがわからないから言語に関係なくポインタ的なものでしか表現しようがない
動的にアロケートしたものだからポインタが必須、ヒープに動的にアロケートしたものだから後で(明示的な)開放が必要なのであって、開放が必要だからポインタへの保存が必須という因果関係ではない
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.008s