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