我正在写一个递归枚举函数,我在某个地方遇到了一个简单的错误。
以下是应该发生的事情:
(enum 1 0.5 2.5)
> (1.0 1.5 2.0 2.5)
以下是代码:
(define enum
(lambda (start step stop)
(if (not (<= stop start))
(cons start (enum (+ start step) step stop))
('(stop))
)))
编辑:
我得到的错误(来自Impromptu(http://impromptu.moso.com.au/))是:
> (print (enum 0 0.5 2.5))
:ERROR: position:(0) in function "enum"
illegal function
Trace: enum
答案 0 :(得分:5)
我相信你的问题在行
('(stop))
我认为你有正确的想法,你想要在结束后停止执行递归,但这不是这样做的方法。因为你把它放在双括号中,这被解释为“评估'停止',然后尝试将其作为一个函数调用。”但是,stop
不是函数,因此是错误。
要解决此问题,如果您想将返回值设为仅包含stop
的列表,请使用list
函数:
(define enum
(lambda (start step stop)
(if (not (<= stop start))
(cons start (enum (+ start step) step stop))
(list stop)
)))
请注意,list stop
周围只有一组括号。
希望这有帮助!