2009-12-05 37 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