使用循环将UCI lisp函数调整为通用lisp

使用循环将UCI lisp函数调整为通用lisp,lisp,common-lisp,clisp,Lisp,Common Lisp,Clisp,我目前正在尝试使用Common Lisp重新创建一个用UCI Lisp编写的旧程序,但我对Lisp不是很流利 最初的功能是: (DE SETROLE (ROLE FILLER CD) (CONS (HEADER:CD CD) (APPEND (FOR (PAIR IN (ROLES:CD CD)) (WHEN (NOT (EQUAL (ROLE:PAIR PAIR) ROLE))) (SAVE P

我目前正在尝试使用Common Lisp重新创建一个用UCI Lisp编写的旧程序,但我对Lisp不是很流利

最初的功能是:

(DE SETROLE (ROLE FILLER CD)
  (CONS (HEADER:CD CD)
        (APPEND (FOR (PAIR IN (ROLES:CD CD))
                    (WHEN (NOT (EQUAL (ROLE:PAIR PAIR) ROLE)))
                    (SAVE PAIR))
                (LIST (LIST ROLE FILLER]
以下是我常见的lisp解释:

(defun setrole (role filler cd)
 (cons (header/cd cd)
    (append (loop for pair in (roles/cd cd)
                do (when (not (equal (role/pair pair) role))
                (save pair)))
            (list (list role filler)))))
这就是出现的错误:

*** - EVAL: variable WHEN has no value
我最初的想法是没有等效的“保存”功能。功能描述如下:

(DE SETROLE (ROLE FILLER CD)
  (CONS (HEADER:CD CD)
        (APPEND (FOR (PAIR IN (ROLES:CD CD))
                    (WHEN (NOT (EQUAL (ROLE:PAIR PAIR) ROLE)))
                    (SAVE PAIR))
                (LIST (LIST ROLE FILLER]
SETROLE制作新的CD表单,添加(角色填充)或替换旧的(角色…)对


请帮帮我,我被难住了

我找到了漏洞。代码下面有一个松散的“when”。

FWIW我几乎可以从这个示例中确定UCI Lisp是InterLisp的一种风格。@tfb:UCI Lisp是Lisp 1.6+BBN Lisp(后来改名为InterLisp)extensions@RainerJoswig:谢谢!你知道有没有用户手册和c幸存下来(我喜欢阅读旧LISP的手册…@tfb:hehe,当然:tfb@RainerJoswig非常感谢.)。。这似乎真的很有希望。你介意帮我安装吗?我已经做了()和()了,但我不知道该怎么做。谢谢