Как установить *readtable* на пустой в common-lisp?

Стандартный common-lisp определяет множество макросов чтения, таких как ( и ) для группировки, ' для quote, " для кавычек строки, | для кавычек символов, # для макроса отправки и т. д. Теперь я хочу отключить их все и использовать свои собственные, и я должен вызвать set-macro-character один за другим, чтобы отключить их все, а затем определить свои собственные.

Я обнаружил, что есть один способ восстановить стандартные макросы всех считывателей, вызвав (setf *readtable* (copy-readtable nil)), но есть ли способ сделать их пустыми (т. е. все символы обрабатываются как обычные буквы и цифры)?


person SaltyEgg    schedule 06.01.2014    source источник
comment
Что бы сделал пустой readtable? Он может быть действительно пустым, тогда вы ничего не сможете с ним прочитать. все символы рассматриваются как обычные буквы и цифры - что бы это значило? Будет ли READ собирать символы и числа? Readtable — это конфигурация считывателя, которая в основном вызывается READ.   -  person Rainer Joswig    schedule 06.01.2014
comment
@RainerJoswig Я пытаюсь перевести lisp на чистый интерпретатор лямбда-исчисления только для учебных целей. Я хочу использовать строчные буквы, а также некоторые другие символы (например, ', |, #) в качестве имен символов, поэтому я должен это сделать.   -  person SaltyEgg    schedule 06.01.2014
comment
Просто разберите его вручную или с помощью какого-нибудь генератора парсеров, это не так сложно.   -  person monoid    schedule 07.01.2014


Ответы (1)


Я не думаю, что есть способ. Ожидается, что вы просто вносите дополнительные изменения в средство чтения Лиспа, а не пытаетесь полностью заменить его. На самом деле он не предназначен для использования таким образом, потому что вы не можете определить все как макрос — большинство составляющих символов связаны со встроенными поведениями, которые не могут быть определены как макросы чтения.

person Barmar    schedule 06.01.2014