試しにリストの末尾要素を求める次のコードを実行してみましょう。4))エラーが出てしまいますね。new-ifをifに変えたら正しく動きます。これが遅延評価が必要である理由です。デフォルト遅延評価ではないSchemeのような言語では、if関数呼び出しの前にthen-clauseもelse-clauseも評価されてしまいます。lst))が真のとき)に本来評価不要であるはずのelseルートの再帰呼び出しを実行してしまったのです。それでは、先のif関数実装のための条件を満たした言語の一例としてHaskellで実装してみましょう。else_clauseこのmyif関数は完璧に正しく動きます。実行されない側(predicateがTrueならelseclause、Falseならthenclause)は評価されないからです。まとめると、if関数を実装するために使用する言語は遅延評価をデフォルトとして実装している必要がありますが、Rubyはこの条件を満たしていません。Haskell等のデフォルト遅延評価である純粋関数型言語を使用すれば実現可能です。彼女がRubyではなく何らかの純粋関数型言語を好きであることは疑いようのない明白な事実です。彼女はRubyが好きな言語だとウソをついたのでしょうか。裏で闇のRubyistたちが暗躍しているとしか考えようがありません。関数型言語が好きだなどと本音を言えない状況下に置かれているのでしょう。彼女の無事を祈っております。追伸:Rubyの勉強会に参加したら彼女に会えるのでしょうか。Disqusk2nr。