Адаптация UCI Lisp l oop к common lisp - PullRequest
0 голосов
/ 26 мая 2020

Привет, я адаптирую следующий код 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))

Пожалуйста, помогите. Соответствие, заполнитель / роль, заполнитель / пара и роль / пара - все это настраиваемые функции.

1 Ответ

0 голосов
/ 26 мая 2020

Я бы сказал, что это будет выглядеть примерно так:

(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))

было бы лучше, если бы вы могли показать источник этих функций (или, по крайней мере, их протокол) и пример входных параметров.

...