Извлечение элемента из списка в схеме

#scheme #racket

Вопрос:

Я хочу извлечь элемент «42», используя только «автомобиль» и » cdr » в схеме

 (car (car ((0) (42 #t) (bar))))
 

Однако я получаю сообщение об ошибке:

 application: not a procedure; 
expected a procedure that can be applied to arguments 
given: 0 
arguments.....: [none]"
 

Комментарии:

1. И сообщение об ошибке …?

2. «применение: не процедура; ожидается, что процедура, которая может быть применена к приведенным аргументам: 0 аргументов…..: [нет] »

Ответ №1:

Для начала, это не список. Вы пропускаете цитату… и, следовательно, Scheme интерпретирует выражение как вызов процедуры (вот о чем говорится в ошибке). Это должно все исправить:

 '((0) (42 #t) (bar))
 

Теперь, что касается вашего вопроса — это как извлечь номер 42 :

 (car (car (cdr '((0) (42 #t) (bar)))))
 

Справа налево cdr пропускается первый элемент в списке, первый car извлекает (42 #t) подсписок и, наконец, последний car извлекает номер. Кстати, вы можете написать все вышеперечисленное более коротким способом, например так:

 (caadr '((0) (42 #t) (bar)))