2013-05-01 71 views
1

我正在爲考試進行研究,但我不確定是否瞭解Scheme中的list程序。我知道它可以用於創建列表變量,如(define x (list 'a 'b 'c))。但是我看到程序創建它的另一個用法:計劃中的清單程序

1 ]=> (define foo3 
      (lambda (b lst) 
       (if b 
        (car lst) 
        (cadr lst) 
       ) 
      ) 
    ) 
;Value: foo3 

1 ]=> (foo3 #f ’(a b)) 
;Value: b 

1 ]=> ((foo3 #t (list cdr car)) ’(a b c)) 
;Value: (b c) 

什麼是(名單CDR車)是什麼意思? (我知道什麼cdrcar意味着首先參考列表和其餘部分)

回答

3

在代碼中,(list cdr car)只是一個過程列表。 foo3將根據傳遞的參數b從該列表中選擇一個過程。在第二個例子中,這個片段:

(foo3 #t (list cdr car)) 

...將返回cdr,因爲第一個參數是#t,所以最後我們只是評估此:

(cdr '(a b c)) 
=> '(b c) 
+0

噢,我明白了。我仍然認爲這個列表基本上是C中的數組。我不認爲我們可以在其中存儲過程。非常感謝你。 – 2013-05-01 17:38:20

+0

是的,這是函數式編程語言中很好的東西之一:過程就像任何其他數據類型一樣,可以將它們作爲參數傳遞,從其他過程返回它們,將它們存儲在數據結構中等。 – 2013-05-01 17:39:40

+4

@MertToka: http://stackoverflow.com/q/252748/166749 – 2013-05-01 17:48:10