0

私はScheme言語が初めてです。「単純なスキーム」の本を読んでいて、次の例に出くわしました。

(cond (empty? 3)
      (square 7)
      (else 9))

実行すると 3 が得られました。各条件式は 2 つの引数を取る必要があることを知っています。1 つは条件の「評価」用で、2 つ目は「答え」です。eval はどこにあり、答えはどこにありますか? なんで ?

4

3 に答える 3

2

これは実際の例ではありません。

あなたが正しく理解しているように、各句には条件結果があります。条件は次のとおりです。正方形その他。答えは379です。

condに評価される最初の条件を探します#t。Scheme では、すべてが#texcept#fです。したがって、最初の条件は true と評価されます。

> (if empty? "true" "false")
"true"

最初の結果3cond返します。

于 2014-03-01T22:06:00.933 に答える
1

の構文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>です。それはあなたが意図したものではありません。

于 2014-03-02T15:33:44.183 に答える