Маленькая помощь здесь пожалуйста. Я пытаюсь создать этот макрос lisp, который принимает список (чисел) в качестве входных данных и возвращает сумму этих чисел. КодBasic Lisp Macro Question
(setf g (list 1 2 3 4))
(defmacro add-test(var)
`(+ ,@var))
(добавить тест г) дает эту ошибку
***** значение G не типа LIST. [Состояние типа TYPE-ERROR] *****
В то же время (добавить-тест (1 2 3 4)) дает правильный результат, 10.
Можете ли вы объяснить, почему он не работает, когда переменная передается функции?
Другие детали -
Lispbox - SBCL
Ubuntu Linux
Заранее спасибо
Благодарим Райнера за подробный ответ. Это очень помогло. – bdev
Из любопытства, скажем, мы принимаем идею Бдева дальше. Предположим, у меня есть какое-то оптимизируемое выражение (список целых чисел!), И я хочу оптимизировать выражение до «run-time». Как мне это сделать? (хотя я полагаю, что (eval G) может работать ...). –
@Paul Nathan: вы можете ЭВОЛЮТ его, СОСТАВЛЯЙТЕ его, ФУНКУЛИРУЙТЕ его, ПРИМЕНЯЙТЕ его - ограничений почти нет. См. Также DEFINE-COMPILER-MACRO, который позволяет писать оптимизации. –