2009-12-05 75 views
1

我是编程新手,正在通过SICP工作,并热爱它。虽然我有点困惑方案的语法定义,主要是,有什么区别:关于定义语法的问题

(define foo bar) 

和:

(define (foo) bar) 

是第一个刚分配栏foo和执行呢?第二个分配和等待电话?

如果是的话,你将如何去调用另一个函数内部的功能,比如说内的if语句,

(if (foo) ...) 

​​

回答

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> 
3

的第二个版本创建一个函数(不带参数),它相当于

(define foo (lambda() bar)) 

要调用它,它会是(foo)

+0

感谢您的快速答复的功能。 – 2009-12-05 03:47:43