1

我有一个家庭作业,我们需要在 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 知之甚少,所以这可能是一个简单的问题。

谢谢!

4

1 回答 1

1

在 Lisp 中,您不会使用任意括号将事物组合在一起。所以你应该做这样的事情:

(define (decrement num)
   (if (> num 0)
      (begin
        (println num)
        (decrement (- num 1))
      )
      (println "done")
   ) 
 )
于 2020-09-28T07:20:12.787 回答