简单的计划练习。第06章真假

时间:2013-04-22 09:47:17

标签: lisp scheme

迎接,我是新来的,所以请照顾我。

6.1中的练习Simply Scheme的表达式为:

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

我的头脑说它应该评估(方格7)并返回。 (空?3)被评估(返回原子 - 用其他原子和列表尝试它,同样的交易)。

我很困惑。

我所知道的:

  1. Scheme中的所有非虚假的东西都是真的。如果3为真并且不为空(#f),为什么cond表达式返回(空?3)?
  2. 评估cond表达式的第一个参数,如果为真,则返回#t,定义的值或取决于上下文的#undefined。如果为false,它将继续连续评估cond参数,直到它执行此操作(或找不到合适的返回值),然后退出cond。
  3. 我不知道的是:

    1. (空?3)自己返回#f。为什么cond在这里终止而不是评估(方块7)?
    2. 为什么cond中的(空?3)的评估会返回原子,而不是#t或#f?
    3. 我正在使用带有Slib的SCM以及随Simple Scheme(simple.scm,functions.scm,ttt.scm,match.scm,database.scm)提供的附加库。

      空? simple.scm中的定义在这一点上超出了我的计划。

2 个答案:

答案 0 :(得分:2)

cond表格是这样的:

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

现在,如果您将代码放入此格式中,那么。 empty?即只是函数empty(而不是它的调用)代替something-to-check-for-truthiness而函数总是一个真值,因此返回3之后的empty?value-if-truthiness-succeed适合empty?槽。因此,根本没有调用{{1}}函数。

答案 1 :(得分:1)

这不是cond所做的。 cond接受一个或多个参数,每个参数必须是scheme-expressions的列表。

(cond(#t))是一个有效的cond语句。

它评估第一个表达式,如果为true,则计算该列表中的其他s-epressions,并返回最后一个表达式的值。

(cond(#t 1 2 3 4(if(number?0)“是的,理智!”“它在皮肤上摩擦乳液”)))是一个有效的cond声明