LINUX.ORG.RU

[Lisp] Макросы и возврат «пустого места»

 


0

0

Необходимо вставить в макросе кусок кода, который либо вставляется, либо опускается в зависимости от заданного ключа.

(defmacro foo (&key (var 0 var-p))
  `(,(if var-p var 'clear-space)))

(foo :var 1)

Собственно совсем не понимаю как сделать в приведёном выше примери clear-space истинно пустым местом, кроме как раскидать всё на 2 ветки в самом начале, так как это было бы сильно не желатильно в виду сильного разрастания кода. Может есть какой-то символ разделитель, или метод?

(defmacro foo (&key (var 0 var-p))
  (if (var-p) (list var)))

Т. к. это функциональщина, результата не может не быть, но nil это и есть некий аналог пустоты. Скажем, (cddr '(1)) -- это nil.

linuxfan
()

можно так:

(defmacro foo (&key (var 0 var-p))
`(бла-бла-бла ,@(if var-p `(,var) nil) ещё-бла-бла-бла))

т.е., вшиваем либо список из каких-то элементов, либо
список из нуля элементов.


den73 ★★★★★
()
Ответ на: комментарий от den73

т.е., попросту

(defmacro foo (&key (var 0 var-p))
`(бла-бла-бла ,@(when var-p `(,var)) ещё-бла-бла-бла))

den73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.