Есть желание написать макрос, что бы не приходилось часто писать конструкции вида (let ((head (car list)) (tail (cdr list))) код). Но возникли следующие проблемы:
(defmacro xxs (lst head tail &rest body)
`(let ((,head (car ,lst))
(,tail (cdr ,lst)))
,body))
(xxs '(1 2 3) 'x 'xs
'(+ x (car xs)))
Выдаётся следующая ошибка:
LET: illegal variable specification #1=('X (CAR '(1 2 3)))
Суть ошибки вроде бы ясна, а вот способ решения не придумать.
Так же не знаю как можно расположить дерективы &option &key &rest, что бы в функции можно было бы указывать по желанию имена head и tail.
Ответ на:
комментарий
от guest-3484-2009
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [emacs] lambda -> cut (2011)
- Форум Необязательные параметры функции в Scheme (2014)
- Форум [Common Lisp] Из assoc list в структуру (2008)
- Форум Выясняем с помощью Emacs, какой ЯП лучше (2024)
- Форум Lisp и макросы (2007)
- Форум [common lisp] Использование одновременно &rest и &key в defun (2010)
- Форум (Lisp) макросы в функционалах (2007)
- Форум cl-defmacro, rest и key (2016)
- Форум Макросы в Scala против макросов в Common Lisp (2017)
- Форум Рекурсивные макросы в Common Lisp (2007)