newLISP Неверная функция

У меня есть домашнее задание, где нам нужно написать некоторые функции в newLISP. У меня возникла проблема, поэтому я привел пример проблемы, чтобы узнать, может ли кто-нибудь мне помочь.

Проблема в том, что после завершения рекурсивной функции она возвращает ERR: invalid function :ошибка. Это происходит независимо от того, что function Звоню есть.

Например, я создал рекурсивную функцию, которая уменьшает число, пока мы не достигнем 0. Это код:

 (define (decrement num)
   (if (> num 0)
     (
       (println num)
       (decrement (- num 1))
     ) 
     
     (
       (println "done")
     )
   ) 
 )

Всякий раз, когда я запускаю эту функцию, начиная с числа 10, результат выглядит так:

> (decrement 10)
10
9
8
7
6
5
4
3
2
1
done
ERR: invalid function : ((println "done"))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement (- num 1))
called from user function (decrement 10)

Я не могу понять, почему это возвращает ошибку неверной функции. Я очень мало знаю о newLISP, так что это может быть простой вопрос.

Благодаря!

1 ответ

Решение

В Лиспе вы не используете произвольные круглые скобки для группировки вещей. Итак, вы должны сделать что-то вроде этого:

(define (decrement num)
   (if (> num 0)
      (begin
        (println num)
        (decrement (- num 1))
      )
      (println "done")
   ) 
 )
Другие вопросы по тегам