- 273 名前:デフォルトの名無しさん mailto:sage [04/10/17 11:45:11]
- >> 254
> なにかすごく賢い"評価器とは切り離された装置" が必要性を判断してくれると仮定しなければ、 print $ [3, 1+2, 4] !! 0 で1+2が評価されない理由は説明できないと思う。 具体的にはその装置はHaskellの一部であって、 Haskellプログラムの内側では議論できない実装に近い部分の話になって くるんじゃないかな。 >>255,>>256のような議論は有意義だと思うが、 上述したような「装置」によって、(:)と(>>)を同列に扱えるのであり、 (:)にその「装置」が必要とされている以上、 (>>)に他の特別な理論をあてはめるよりは、 必要に応じて評価される。という lazy evaluationの原則を単純にあてはめればすむのではないかと思う。 ちなみに、 IOというものは[](リスト)と同様にそこにある何かであり、 たとえばputStrLn "Hello"が実行されると"Hello"を出力するのは、 [1,2,3]が(!!1)で2を返すのと同様にとらえられるのではないだろうか。 IOは評価時点では出力されずに、実行という次のステップで出力が生じる。 これは、 main = putStr "Hello " `seq` putStrLn "World" での出力が World であるという点からも理解されるのではないだろうか。 HaskellのIOでは評価と実行は切り離されている。ということに今日気付いた。
|

|