【发布时间】:2015-12-02 12:33:16
【问题描述】:
我在 Scheme 中编写的函数 showlength 有问题:
(define showlength
(lambda (m lst)
(cond ((number? m) (list (cons m lst)
(+ 1(length lst))))
((pair? m) (let* ([x (cdr m)]
[y (car m)])
(showlength x lst)
(showlength y lst))))))
该代码旨在获取一个数字或一对数字和一个列表(lst),并返回一个列表,显示列表中包含的所有值和列表的长度。当我只有一些示例时,该程序适用:
(showlength 2 '())
并返回
((2) 1)
但是当我尝试解决由一对示例组成的问题时
(showlength (cons 2 3) ' ())
返回值的含义
((0 . 1) 3 2) 3)
它显示
((2) 1)
我的代码有什么问题?
编辑:对于那些代码不是很清楚的人。当使用一对数字时,该代码旨在将该对的 cdr 添加到列表中。然后它的意思是将对的汽车添加到列表中(其中列表已经包含上面对的 cdr),然后返回列表及其长度
【问题讨论】:
-
我建议您以可读的方式格式化和缩进您的代码。这会很有帮助。
-
您将丢弃
(showlength x lst)的结果(在您的示例中为(showlength 3 '()))并返回(showlength y lst)(showlength 2 '()))。非常不清楚您的功能应该做什么-您的示例似乎都与您的描述不符。第一种,“列表中包含的所有值”什么都不是,列表的长度为0。 -
Rainer Joswig 这对你来说可读性够吗?抱歉,这还是个业余爱好者
-
molbdnilo 我认为从 (showlength x lst) 获得的值(列表和长度)将更新 lst,然后我将使用更新后的值来编译 (showlength y lst) 函数和返回值