Проблема с «Неправильно сформированным предложением», mit-scheme

#scheme #lisp

#схема #lisp

Вопрос:

Пробую немного Lisp, используя mit-scheme.

 (define (inv curstate x y)
  ((cond (= y 1) curstate)
   (cond (even? y)
         (inv (square curstate) x (/ y 2)))
   (else 
    (inv (* x curstate) x (- y 1)))))
  

Ошибка интерпретатора:

Неправильно сформированное предложение: curstate

В другой версии используется метод линейной рекурсии, поэтому с ним возникает аналогичная ошибка. Что делать?

Ответ №1:

Ваш синтаксис для cond неправильный. Вот тот же код с исправленным синтаксисом:

 (define (inv curstate x y)
  (cond ((= y 1) curstate)
        ((even? y)
         (inv (square curstate) x (/ y 2)))
        (else
         (inv (* x curstate) x (- y 1)))))