使带有循环的 UCI lisp 函数适应 common lisp
Adapting UCI lisp function with a loop to common lisp
我目前正在尝试使用 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
我最初的想法是没有等效的 'save' 函数。函数的描述是:
SETROLE Makes a new CD form with (ROLE FILLER) added or replacing the old (ROLE ...) pair.
请帮忙,我很困惑
我发现了这个错误。代码下面有松散的'when'.
我目前正在尝试使用 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
我最初的想法是没有等效的 'save' 函数。函数的描述是:
SETROLE Makes a new CD form with (ROLE FILLER) added or replacing the old (ROLE ...) pair.
请帮忙,我很困惑
我发现了这个错误。代码下面有松散的'when'.