関数型プログラミング言語Haskell Part5
■ このスレッドは過去ログ倉庫に格納されています
0778デフォルトの名無しさん
2006/10/08(日) 20:54:03putChar 'a' >>= (\ha -> putChar 'b' >>= (\hb -> putChar 'c' >>= (\hc -> return (ha:hb:hc:[])))) で、
return (ha:hb:hc:[]) は、「"abc"を出力する動作」で、これが返り値。でも、その返り値は使われてない。
3つの>>=によって「'a'を出力する処理」「'b'出力する処理」「'c'出力する処理」がこの順で実際に実行される。
と言うことですね。
しかし、その形に展開する過程で、たとえば、
mySequence (putChar 'c':[]) = putChar 'c' >>= (\hc -> (return []) >>= (\tc -> return ('c' : tc)))
↓
mySequence (putChar 'c':[]) = putChar 'c' >>= (\hc -> return ('c':[]))
のような展開がありました。
この展開で>>=によって、[]を出力する事になってしまわないのでしょうか。
ここでは[]ですが、ほかに、"c"と"bc"が出力されるような展開がありました。
これらの出力実行はどうなってしまったのでしょうか。展開と評価は別?
展開ってなんでしょう? 評価と同様に、実際に>>=の定義によってなされるものですよね?
■ このスレッドは過去ログ倉庫に格納されています