私はプログラミング言語理論を研究していますが、怠惰な言語に突然変異がないという確かな理由を理解することはできません。誰もが理由を知っていますか?
2 に答える
怠惰とは、戻り値が使用されるまで(または使用されない限り)関数が実際に評価されないことを意味します。これは、関数呼び出しが必ずしもコードに表示される順序で評価されるとは限らないことを意味します。また、評価されないため(存在しない戻り値を使用できないため)、void関数を使用できないことも意味します。
ただし、副作用(ミューテーションなど、画面への印刷だけ)を実行する関数の場合、実行される順序は重要です。それらが実行されることはさらに重要です。これは、怠惰な言語には、それらが正しい順序で実行および実行されることを保証する特別なタイプの副作用をエミュレートする方法が必要であることを意味します。
完全に副作用のないプログラムは役に立たないので(画面に印刷できる必要があります)、怠惰な言語は実際には副作用をサポートしています。それらは、IOモナドまたは一意性タイプでカプセル化するだけです。例として、haskellには可変配列がありますが、それらはIOモナド内でのみ使用できます。
ミューテーションとは、プログラムの状態をいつでも確認できず、アクションによる副作用について心配する必要があることを意味します。私は実際にそれについて考えました、そして私は突然変異をサポートする完全に怠惰な言語を持つ方法を考えることができません。(私はコンピューター科学者ではありませんが。)