私はScheme言語が初めてです。「単純なスキーム」の本を読んでいて、次の例に出くわしました。
(cond (empty? 3)
(square 7)
(else 9))
実行すると 3 が得られました。各条件式は 2 つの引数を取る必要があることを知っています。1 つは条件の「評価」用で、2 つ目は「答え」です。eval はどこにあり、答えはどこにありますか? なんで ?
私はScheme言語が初めてです。「単純なスキーム」の本を読んでいて、次の例に出くわしました。
(cond (empty? 3)
(square 7)
(else 9))
実行すると 3 が得られました。各条件式は 2 つの引数を取る必要があることを知っています。1 つは条件の「評価」用で、2 つ目は「答え」です。eval はどこにあり、答えはどこにありますか? なんで ?
これは実際の例ではありません。
あなたが正しく理解しているように、各句には条件と結果があります。条件は次のとおりです。、正方形、その他。答えは3、7、9です。
cond
に評価される最初の条件を探します#t
。Scheme では、すべてが#t
except#f
です。したがって、最初の条件は true と評価されます。
> (if empty? "true" "false")
"true"
最初の結果3をcond
返します。
の構文cond
は次のとおりです。
(cond <clause1> <clause2> …)
where句は次のとおりです。
(<test> <expression1> …)
また
(<test> => <expression>)
そして最後<clause>
は(else <expression1> <expresssion2> …)
. したがって、=>
大文字と小文字を区別しないと、cond
式は次のようになります。
(cond (<test> <exp1> <exp2> …)
…
(else <exp1> <exp2> …))
これをあなたの表現と一致させると:
(cond (empty? 3)
(square 7)
(else 9))
がバインドされている場合empty?
、識別子<test>
は常に true であることがわかります。empty?
識別子square
は別のもの<test>
です。それはあなたが意図したものではありません。