関数型プログラミング言語Haskell Part3at TECH
関数型プログラミング言語Haskell Part3 - 暇つぶし2ch255:デフォルトの名無しさん
04/10/16 05:13:41
>>251
まず、mainだけ特殊な評価をうけるとは考えないことにします。

右から評価されると無限ループも書けないというのは、
main = loop where   loop =  act >> loop
                    act = print "x"
ここでloopの右辺を先に評価したらact >> (act >> (act >> ..))と
ネストした列ができるだけでloopの処理が進まないという意味です。
末尾再帰も同様のことになります。

先に述べたように、特殊な評価装置や特殊ルールは考えないので、これは、
(>>)がそういう順序に評価を導くように定義されているということを意味します。

単にmainそのものを評価しても、(\_ -> ...)の形か、
(コンストラクタ) ...の形になって...の部分は評価されずに終わります。
これでは...の中に書いてあるIOアクションの列をどう評価、
実行していけばいいかはわかりません。

そこで、mainは関数であって(type IO a = World -> (a, World)、
プログラムの実行とはmain worldを評価する、つまりmain worldの
返り値を求める評価を行うことだと考えることにします。

例えば(putStr "X") worldを評価すると、
"X"が出力されたWorldを返します("X"が出力される)。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch