你好,我正在将下面的UCI lisp代码改编成通用lisp。
这是原函数。
(DE MATCH-ARGS (PAT-ARGS CONST BINDING-FORM)
(LOOP ((INITIAL PAT-ARG NIL CONST-VAL NIL)
(WHILE (SETQ PAT-ARG (POP PAT-ARGS)))
(DO (SETQ CONST-VAL (FILLER:ROLE (ROLE:PAIR PAT-ARG) CONST)))
(WHILE (SETQ BINDING-FORM
(MATCH (FILLER:PAIR PAT-ARG)
CONST-VAL
BINDING-FORM)))
(RESULT BINDING-FORM]
这是我现在改编的函数
(defun match-args (pat-args const binding-form)
(loop (initial pat-arg nil const-val nil)
(while (setq pat-arg (pop pat-args)))
do (setq const-val (filler/role (role/pair pat-arg) const))
(while (setq binding-form
(match (filler/pair pat-arg)
const-val
binding-form)))
(result binding-form)))
这是它显示的错误
*** - LOOP: illegal syntax near (INITIAL PAT-ARG NIL CONST-VAL NIL) in
(LOOP (INITIAL PAT-ARG NIL CONST-VAL NIL) (WHILE (SETQ PAT-ARG (POP PAT-ARGS))) DO
(SETQ CONST-VAL (FILLER/ROLE (ROLE/PAIR PAT-ARG) CONST))
(WHILE (SETQ BINDING-FORM (MATCH (FILLER/PAIR PAT-ARG) CONST-VAL BINDING-FORM)))
(RESULT BINDING-FORM))
请帮助我 Match、fillerrole、fillerpair和rolepair都是自定义函数。
我想说它看起来像这样。
(defun match-args (pat-args const binding-form)
(loop for pat-arg in pat-args
for const-val = (filler/role (role/pair pat-arg) const)
do (setq binding-form
(match (filler/pair pat-arg)
const-val
binding-form))
while binding-form
collect binding-form))
如果你能展示这些函数的来源(或者至少是它们的协议)和输入参数的例子,那会更好。