エントリーの編集

エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
遅延評価だけだと出力の順番が定まらない例 - あどけない話
記事へのコメント2件
- 人気コメント
- 新着コメント
人気コメント算出アルゴリズムの一部にヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
関連記事
遅延評価だけだと出力の順番が定まらない例 - あどけない話
Haskell に関してよく見かける説明は、おおむね次のような感じだ。「遅延評価では、その値が必要になっ... Haskell に関してよく見かける説明は、おおむね次のような感じだ。「遅延評価では、その値が必要になったときに初めて評価されるので、順番が大切な入出力とは相性が悪い。」 Haskellの入出力は、基本的にIOモナドを使用しないと扱えない。IOモナドは、入出力の順番を制御してくれる。だから、遅延評価は入出力と相性が悪いと言われても、実際相性の悪い例題は示せないので、納得できない。 この問題を長い間考えていたが、昨日ひらめいた。Haskellでは純粋な関数にIOを忍び込ませることは、基本的にはできないけれど、裏技がある。Debug.Traceで定義されている trace がその掟を破る。 trace は第一引数を出力し、第二引数を返す関数である。出力するにも関わらず、関数の型にはIOは現れない。 trace :: String -> a -> a trace string expr = un