【发布时间】:2011-04-24 02:49:49
【问题描述】:
这个函数是一个 CLisp 函数,这是一个家庭作业问题的一部分,但它应该以这种不同的格式编写(第二个函数)。
(defun range (m M) (cond
((> m M) '() )
((= m M) '() )
((< m M) (cons m (range (+ m 1) M ) ) )
)
)
(define (range m M) (cond
((> m M) '() )
((= m M) '() )
((< m M) (cons m (range (+ m 1) M ) ) )
)
)
这些都应该取最小值 (m) 和最大值 (M),并返回从最小值到最大值的整数列表(不包括最大值 / M-1)
我一遍又一遍地追踪这个,我不明白为什么它只是返回 NIL 这一定是一个非常愚蠢的逻辑错误。
(range 1 4) => result (1 2 3)
m=1 | M=4 ==> return (cons 1 (2 3) )
m=2 | M=4 ==> return (cons 2 (3) )
m=3 | M=4 ==> return (cons 3 () )
m=4 | M=4 ==> return ()
v ^
---------/
我快疯了,想弄清楚为什么它的表现不像我追踪的那样。
同样,当我执行该函数时,它会导致 NIL。
【问题讨论】:
-
您的第二个函数是 Scheme 代码,第一个函数是 Common Lisp。你的 Scheme 函数在我的机器上工作,Common Lisp 版本看起来也应该。 (我没有尝试过,因为我没有在这台机器上安装 Common Lisp。)
-
CLisp 是一个 Common Lisp 实现。你在用那个吗?该语言称为 Common Lisp,而不是 CLisp。
标签: function recursion lisp functional-programming clisp