Привет, я адаптирую следующий код 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))
Пожалуйста, помогите. Соответствие, заполнитель / роль, заполнитель / пара и роль / пара - все это настраиваемые функции.