Использование # a.k.a. read-macro

Читая книгу Дуга Хойта «Let Over Lambda», я нашел следующее описание#. sign, a.k.a. read-macro:

Основной макрос чтения, который поставляется с COMMON LISP - это #. Макрос Eval времени чтения. Этот макрос чтения позволяет встраивать в формы, которые вы читаете, объекты, которые не могут быть сериализованы, но могут быть созданы с небольшим количеством кода для lisp.

Это из главы 4, большую часть книги можно найти здесь:http://letoverlambda.com/index.cl/toc

Это пример из книги, который показывает, как одно и то же выражение может каждый раз читаться по-разному:

* '(football-game
     (game-started-at
       #.(get-internal-real-time))
     (coin-flip
       #.(if (zerop (random 2)) 'heads 'tails)))

(FOOTBALL-GAME
  (GAME-STARTED-AT 187)
  (COIN-FLIP HEADS))

* '(football-game
     (game-started-at
       #.(get-internal-real-time))
     (coin-flip
   #.(if (zerop (random 2)) 'heads 'tails)))

(FOOTBALL-GAME
  (GAME-STARTED-AT 309)
  (COIN-FLIP TAILS))

Далее автор демонстрирует некоторые хардкорные трюки, создавая вариации с# макро.

Итак, получается, что#' также является своего рода макросом для чтения и обычно используется перед символами, которые представляют имена функций. Но нужно ли это, и какая у него там работа?

Я могу поставить символ для функций более высокого порядка с#' или без него:

CL-USER> (defun test nil t)
TEST
CL-USER> (funcall #'test)
T
CL-USER> (funcall 'test)
T

с таким же успехом.

Ответы на вопрос(4)

Ваш ответ на вопрос