我是编程新手,通过SICP工作,并喜欢它。虽然我对方案的定义语法有点困惑,但主要区别是:
(define foo bar)
和
(define (foo) bar)
第一个只是为foo分配bar并执行它吗?第二个分配并等待通话?
如果是这样,您将如何调用另一个函数内的函数,比如if语句,
(if (foo) ...)
或
(if foo ...)
答案 0 :(得分:7)
第一个版本创建一个名为foo的变量,并为其指定一个bar的引用。没有其他任何东西被执行。
第二个版本使用正文栏创建一个函数。该函数没有被执行,它被归档(猜测你的意思是'等待'?)。
您总是通过将其作为列表中的第一项并评估列表来调用函数。
创建变量
> (define a 1)
> a
1
创建另一个引用其他变量的变量
> (define b a)
> b
1
创建一个返回
中的内容的函数> (define (c) a)
> c
#<procedure:c>
评估功能
> (c)
1
编写一个评估另一个函数的函数并返回结果
> (define (d) (if (odd? a) (c) 0))
> (d)
1
现在更改它以返回函数c
> (define (d) (if (odd? a) c 0))
> (d)
#<procedure:c>
答案 1 :(得分:3)
第二个版本创建一个函数(没有参数),它相当于
(define foo (lambda () bar))
要调用它,它将是(foo)