嗨,我正在把下面的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))请帮帮忙。匹配、填充/角色、填充/配对和角色/配对都是自定义函数。
发布于 2020-05-26 21:20:10
我会说它看起来像这样:
(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))如果你能展示这些函数的源代码(或者至少是它们的协议)和输入参数示例,那就更好了。
https://stackoverflow.com/questions/62021113
复制相似问题