関数型プログラミング言語Haskell Part27_©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0613デフォルトの名無しさん
2015/02/21(土) 00:19:24.05ID:KgB/c0aN>> 継続のような制御構造をプログラムとして明示的に記述したいケースに限れば、
この箇所、間違いではないが誤解しやすいと思われるので、以下のように訂正する
X: 継続のような制御構造を --> O: 継続を含む制御構造を
>>591 で書いたように「継続は制御構造の一種である」という意味
>小細工が必要になるのは、「遅延評価を採用しているから」なの?
そのとおり
たとえば副作用を伴う関数 f と g を「逐次」的に評価したい時、
先行評価であれば単に逐次関数 seq に 式 f x と g y を適用するだけで、
f x を評価した後に g y を評価するという逐次性が確実に保証できる
けれども遅延評価では(必要になるまで評価が遅延されるから)、
式 seq (f x) (g y) を評価した時における関数 f と g の評価順序は予測できない
だから遅延評価な関数型言語で(命令型言語の)制御構造を表現するには、
何らかの工夫(=小細工)が必要になる
>「継続のような制御構造をプログラムとして明示的に記述したいケース」
>は純粋ではないからなんじゃないの?
>>539 で書いたように、(継続を含む)制御構造は純粋だよ
純粋でないのは制御構造の対象要素であるI/Oや破壊的代入のような命令の部分
命令型言語の制御構造は、フローチャートを思い浮かべれば分かるように
ステートマシン(有限状態機械)としてモデル化できる
そして良く知られているようにステートマシンは純粋な関数として表現できる
(純粋な)制御構造と(純粋ではない)命令とをごっちゃにしてはいけない
■ このスレッドは過去ログ倉庫に格納されています