Лисщ автомобиль последнего элемента?
Вопрос
Лискус пни мне еще раз ... почему я не могу получить ценность последнего элемента в списке? У меня есть список, подобное этому:
(setq bar '(((1 2) 3 4 5)((6 7) 8 9 10)))
Теперь я получаю возвращение 4 для:
(caddar bar)
Есть возвращение (5) для:
(cdddar bar)
Но я не могу получить 5 для:
(cadddar bar)
Почему это - и как я могу получить ценность 5?
Ошибка:
; Warning: This function is undefined:
; CADDDAR
Error in KERNEL:%COERCE-TO-FUNCTION: the function CADDDAR is undefined.
[Condition of type UNDEFINED-FUNCTION]
Решение
Функции с 5 или более A's и d не определены. Только 4 и меньше. Существует слишком много возможных функций этой длины, чтобы она была практичной.
Вы должны просто прописать это:(car (cdr (cdr (cdr (cdr (car x))))))
Другие советы
Ну, на сообщение об ошибке, нет cadddar
функция. Имейте в виду, что car
а также cdr
являются примитивными функциями чтения списка. Другие нравятся caddar
являются удобными функциями, которые построены из комбинации одного или нескольких car
а также cdr
. Отказ То есть вы могли бы выполнить манипуляцию списка просто отлично только с car
а также cdr
если caddar
И т. Д. Не существовали, расширенные функции просто облегчают вашу жизнь.
Итак, способ подойти к этому, чтобы синтезировать свои собственные cadddar
с использованием car
а также cdr
. Отказ Если это не сразу очевидно, как это сделать, начните более простое (с, скажем, cadr
или cdar
) и построить до cadddar
.
(first (last (first '(((1 2) 3 4 5) ((6 7) 8 9 10)))))
-> 5
Функции с более чем 4 a
песок d
S не определяется стандартом, может быть, потому что есть 32 из них [и он получает экспоненциально Месье ».
Обязательный способ получить последний элемент списка: last
Возвращает последнюю минусу ячейки, так
(car (last list))
дает вам последний элемент списка. Конечно, list
может быть что-то еще, как (first list)
.