Какие версии LISP имеют putprop?

Я взламываю старую программу на Лиспе, которая когда-то компилировалась и работала на Franz LISP, как утверждается. Но Franz LISP слишком стар, поэтому я пробую компилятор CLISP. Однако в CLISP нет putprop.

Я понимаю, что мог бы написать функцию, которая делает то же самое, что и putprop, но на случай, если мне придется выполнять дальнейшие переводы, мне интересно: в каких версиях Lisp есть putprop?


person Community    schedule 25.03.2011    source источник


Ответы (4)


у MACLISP это было. Поскольку Franz Lisp, как сообщается, похож на MACLISP, существует не-zerop вероятность того, что Примечания по преобразованию MACLISP/Zetalisp в Common Lisp могут помочь вам получить код, с которым вы работаете, для запуска. современная реализация Common Lisp.

Удачи!

person Matthias Benkard    schedule 25.03.2011

Эквивалентная функциональность обеспечивается в Common Lisp комбинацией SETF и GET.

CL-USER 1 > (setf (get 'foo :bar) :baz)
:BAZ

CL-USER 2 > (get 'foo :bar)
:BAZ
person Rainer Joswig    schedule 25.03.2011

Portable Standard Lisp также имеет его, как и Interlisp. Причина, по которой Common Lisp этого не делает, вероятно, из-за отвратительного SETF, который вы не должны трогать шестом, так как он деструктивно изменяет структуры данных. Однако, вероятно, putprop в других устаревших Лиспах также работает путем деструктивной модификации, поэтому, если вы хотите реализовать putprop, вы можете это сделать:

(defmacro putprop (var prop val)
  `(setf (get ,var ,prop) ,val)) 
person Simon Brooke    schedule 10.05.2019

насколько я помню, в Scheme есть putprop; но вы называете это LISP?


ACL2, http://en.wikipedia.org/wiki/ACL2, а также имеет putprop и построен на Common Lisp.

person jcomeau_ictx    schedule 25.03.2011
comment
нет, LISP, который я имел в виду, синтаксически немного отличается от Scheme. и я думаю, что лучшим решением для меня будет использование версий LISP. - person ; 25.03.2011
comment
si.washington.edu/static/skandha4/manuals/slisp_289.html говорит, что это есть в XLISP; да ладно, это тоже схема - person jcomeau_ictx; 25.03.2011
comment
см. исправленный ответ, я нашел Common Lisp, в котором есть putprop. Я не считаю, что заслужил отрицательный голос в любом случае. - person jcomeau_ictx; 25.03.2011
comment
Я бы не назвал XLISP схемой, даже если бы XLISP1 имел (IIRC) единое пространство имен для функций и переменных. Я считаю, что XLISP2 ближе к Common Lisp. - person Vatine; 25.03.2011
comment
Основное утверждение вашего ответа неверно, в Scheme вообще нет putprop. Это было бы даже невозможно реализовать, потому что символы Scheme обычно не имеют списков свойств. - person Rörd; 25.03.2011
comment
Я помню, как это было, когда я играл с ним в начале 90-х. эта веб-страница, похоже, согласна: cs.indiana.edu/classes/b551- утечка/scheme_practice.html - person jcomeau_ictx; 26.03.2011
comment
putprop/getprop были частью R2RS, если я правильно помню свою старую книгу по языку программирования Lisp. - person p_l; 14.04.2011
comment
также здесь, 1987 года: books.google. ком/ - person jcomeau_ictx; 14.04.2011