#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)))