关于定义语法的问题

时间:2009-12-05 03:09:29

标签: scheme

我是编程新手,通过SICP工作,并喜欢它。虽然我对方案的定义语法有点困惑,但主要区别是:

(define foo bar)

(define (foo) bar)

第一个只是为foo分配bar并执行它吗?第二个分配并等待通话?

如果是这样,您将如何调用另一个函数内的函数,比如if语句,

(if (foo) ...)

(if foo ...)

2 个答案:

答案 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)