Это довольно редко можно увидеть.
#+clim clim:+red+ #-clim mygraphics:+red+
выше означает, что считыватель возвращает либо красный символ, и это зависит от того, есть ли символ с именем CLIM в списке функций *features*
. Это встроенный механизм в Common Lisp.
#.(cl:if (cl:zerop (cl:random 2)) :high :low)
Выше также представлен механизм считывателя. Это позволяет делать вычисления во время чтения. Который между прочим это проблема безопасности, и в приложениях на Лиспе она должна быть отключена - см. переменную *read-eval*
для управления этим. Во время чтения читатель, использующий READ, вернет либо: HIGH, либо: LOW, случайно.
Комбинация #+#.(FOO) BAR
означает, что функция foo возвращает символ во время чтения, и этот символ затем проверяется читателем, если есть символ с этим именем в списке функций *features*
и если это так, затем читается следующий элемент ввода, в противном случае следующий элемент пропускается.
Тривиальный пример, IF всегда возвращает: CAPI в этом примере:
В LispWorks (где CAPI находится в списке функций):
CL-USER 41 > (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")
A
31
В SBCL
* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")
B
32