1

こんにちは、私はSOを初めて使用するので、よろしくお願いします。

Simply Schemeの演習6.1には次の式があります。

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

私の心は、(square 7) を評価してそれを返す必要があると言っています。(empty? 3) が代わりに評価されます (アトムを返しました — 他のアトムとリストで試してみましたが、同じことです)。

よくわかりません。

私が知っていること:

  1. false でない Scheme のすべてが true です。3 が真で空でない場合 (#f)、cond 式が (空? 3) を返すのはなぜですか?
  2. cond 式の最初の引数が評価され、それが true の場合は #t を返します。これは、コンテキストに応じて定義済みまたは未定義の値です。false の場合、cond 引数の評価が完了するまで (または適切な戻り値が見つからないまで)、cond を終了します。

私が知らないこと:

  1. (空? 3) 単独で #f を返します。cond がここで終了し、評価されないのはなぜですか (正方形 7)?
  2. cond 内で (empty? 3) を評価すると、#t や #f ではなくアトムが返されるのはなぜですか?

Slib で SCM を使用しており、Simply Scheme で提供される追加のライブラリ (simply.scm、functions.scm、ttt.scm、match.scm、database.scm) が読み込まれています。

空の?Simply.scm での定義は、現時点では私のスキームの理解を超えています。

4

2 に答える 2

2

condフォームは次のようになります。

(cond (something-to-check-for-truthiness value-if-truthiness-succeed)
        ...other checks in the same format as above  )

コードをこの形式にすると、次のようになります。 empty?つまり、空の関数 (その呼び出しではない) が代わりに収まりsomething-to-check-for-truthiness、関数は常に真の値であるため、後にスロットに収まる数値3が返されます。したがって、関数の呼び出しはまったくありません。empty?value-if-truthiness-succeedempty?

于 2013-04-22T11:30:28.363 に答える