2013-05-01 5 views
1

Я изучаю экзамен прямо сейчас, но я не уверен, понял ли я процедуру 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 и car означает в отношении ссылок на первый и весь список)

ответ

3

В коде (list cdr car) - это всего лишь перечень процедур. foo3 выберет одну процедуру из этого списка в соответствии с переданным параметром b. Во втором примере, этот фрагмент:

(foo3 #t (list cdr car)) 

... Вернется cdr потому, что первый параметр был #t, так что в конце концов мы просто оценить это:

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

Оу, я вижу. Я все еще думаю, что список в основном представляет собой массив в C. Я не думал, что мы можем хранить в нем процедуры. Большое спасибо. –

+0

Да, это одна из приятных вещей в функциональных языках программирования: процедуры подобны любым другим типам данных, и вы можете передавать их как параметры, возвращать их из других процедур, хранить их в структурах данных и т. Д. –

+4

@MertToka: http://stackoverflow.com/q/252748/166749 –

Смежные вопросы