Почему дихотомия функция / макрос?

Почему дихотомия функция / макрос присутствует в Common Lisp?

Каковы логические проблемы в разрешить одно и то же имя, представляющее как макрос (имеет приоритет при нахождении в позиции функции в compile / eval), так и функцию (можно использовать, например, с mapcar )?

Например, имея секунд ], определенный как макрос и как функция, позволит использовать

(setf (second x) 42)

и

(mapcar #'second L)

без необходимости создавать какие-либо уловки setf .

Конечно, очевидно, что макросы могут делать больше, чем функции и так что аналогия не может быть полной (и я, конечно, не думаю, что каждый макрос должен также быть функцией), но зачем запрещать это, заставляя оба совместно использовать единое пространство имен, когда это может быть потенциально полезно?

Надеюсь, я никого не обижаю, но на самом деле я не нашел ответа «Зачем это нужно?» R очень уместно ... Я ищу, почему это плохая идея. Введение произвольного ограничения из-за того, что не известно о хорошем использовании, является в ИМО несколько высокомерным (вроде как предполагает совершенное предвидение).

Или есть практические проблемы с его разрешением?

13
задан 6502 16 October 2011 в 20:28
поделиться