这个 Lisp 函数有什么问题?
该函数是一个 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。
This function is a CLisp function, this is part of a homework problem, but which is supposed to be written in this different format (the second function).
(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 ) ) )
)
)
These should both take a min value (m) and a max value (M) and return the list of integers from min to max (exluding the max value / M-1)
I have traced this over and over and I can't see why it is just returning NIL it must be a very dumb logic mistake.
(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 ^
---------/
I'm going crazy trying to figure out WHY this is not performing like I trace it.
Again, when I execute the function it results in NIL.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我使用 SBCL 运行它,它抱怨变量 M 在参数列表中出现两次。 Lisp 对变量名不区分大小写。
将其更改为
效果很好。
我用 CLISP 查过。使用不同的变量名称可以正常工作。与 SBCL 不同,CLISP 不会发现错误。
这是您的版本:
I ran this using SBCL and it complained that the variable M appears twice in the parameter list. Lisp is not case-sensitive for variable names.
On changing it to
It worked fine.
I checked with CLISP. With different variable names it works OK. CLISP does not pick up the error, unlike SBCL.
Here is your version: