Что такое функция defs в Лиспе?

В файле "Dictio", расположенном по ссылке "Текстовая консольная версия" этого сайта, я заметил команду Лиспа (?) под названием defs.

Я предполагаю, что это что-то похожее на defun, но я не могу найти никакой информации о том, что делает defs; используется ли он для определения функции или, может быть, переменной? Я хочу воспроизвести этот код, используя современные методы, и это поможет узнать цель defs.

Вызовы defs, кажется, также включают больше, чем имя перед аргументами (я ожидаю, что он будет читать (defs name () body).

Глядя на первую функцию в списке, кажется, что в это «определение функции» включено больше [слово «функции» в частности], а в третьей функции есть ['semantics'], включенный после того, что кажется именем функции ( перед аргументами).


person StandardOutput    schedule 10.05.2015    source источник
comment
Он определен в файле SYSCOM.   -  person Rainer Joswig    schedule 10.05.2015
comment
Мне было интересно, почему кто-то пометит этот вопрос как неисследованный ... Я посмотрел, но, видимо, недостаточно внимательно. Спасибо Райнер.   -  person StandardOutput    schedule 10.05.2015


Ответы (1)


DEFS определяется программой в файле SYSCOM.

Это FEXPR, функция, которая получает аргументы без оценки. Common Lisp не имеет такой возможности. Вместо этого он использует макросы.

Пример использования:

(DEFS \#COLOR 
    FEXPR (LAMBDA (A)
            (EVAL (SUBST (CAR A)
                         'COLOR
                         '(OBJECT 
                           (MARKERS\: (\#PHYSOB COLOR) 
                                      PROCEDURE\: ((\#COLOR *** COLOR))))))) 
    PRIORITY 192. 
    SYS (\#PROPERTY))

Здесь у вас есть символ #COLOR. Он получает функцию (фактически FEXPR), определенную под этим именем. Также он помещает PRIORITY и SYS в список свойств символа. Таким образом, DEFS используется для определения символов с функциями и свойствами в одной определяющей форме.

person Rainer Joswig    schedule 10.05.2015