我正在攻击一个旧的Lisp程序,该程序曾经在Franz LISP中编译和工作。但是Franz LISP太旧了,所以我正在尝试CLISP编译器。但是,CLISP没有putprop
。
我意识到我可以编写一个与putprop
完全相同的函数,但是如果我必须执行进一步的翻译,我想知道:Lisp的哪个版本有putprop
?
答案 0 :(得分:4)
MACLISP had it.自Franz Lisp is reportedly similar to MACLISP以来,肯特皮特曼的Notes on Converting MACLISP/Zetalisp to Common Lisp可以帮助您获取正在使用的代码现代Common Lisp实现。
祝你好运!答案 1 :(得分:3)
通过SETF和GET的组合在Common Lisp中提供了等效功能。
CL-USER 1 > (setf (get 'foo :bar) :baz)
:BAZ
CL-USER 2 > (get 'foo :bar)
:BAZ
答案 2 :(得分:0)
便携式标准Lisp也有它,Interlisp也有。 Common Lisp不能执行的原因可能是由于可执行SETF
,您不应该碰触它,因为它破坏性地修改了数据结构。但是,其他旧版Lisps中的putprop
可能也可以通过破坏性修改来工作,因此,如果要实现putprop
,可以这样做:
(defmacro putprop (var prop val)
`(setf (get ,var ,prop) ,val))
答案 3 :(得分:-1)
我记得,Scheme已经putprop;但你称之为LISP吗?
<小时/> ACL2,http://en.wikipedia.org/wiki/ACL2,也有putprop,它建立在Common Lisp上。