我知道cons
用于构建对,例如(cons 2 (cons 3 empty))
,但我不理解这里使用cons
empty
之后的代码。是不是cons
为数字而建? cons
怎么能得到2个论点?如果他们可以采取2个论点,它如何评估它们?并且有人可以在[(empty? lst) empty]
之后翻译代码。
(define (removed2 lst)
(cond
[(empty? lst) empty]
[(not (member? (first lst) (rest lst)))
(cons (first lst) (removed2 (rest lst)))]
[else (removed2 (rest lst))])
答案 0 :(得分:2)
我建议你阅读一本关于Scheme的好书或教程,你要求解释一些最基本的概念,在开始编码之前应该很好理解方案。例如,这个chapter是一个很好的起点。我会解答你的问题:
我知道
cons
用于构建对,例如(cons 2 (cons 3 empty))
事实上,你可以构建一对你需要的任何 ...数字对,成对对,你可以命名。
但我不理解这里使用
cons
后empty
的代码。
在这种情况下,empty
表示空列表'()
。因此,我们可以构建一个对,其中第一个元素是一个原子(在这种情况下是一个数字),第二个是一个空列表 - 这就是我们如何在Scheme中构建正确的列表!
Isn&#t; t
cons
是否为数字而建?
不,它是用于构建任何对,包括其他对。
cons
怎么能拿2个参数?如果他们可以采用2个参数,那么它如何评估它们呢?
为什么不呢?正如您已经说过的那样,cons
用于构建对。一对由两件事组成,因此cons
需要2个参数。它依次评估它们中的每一个,然后将它们粘在一起形成一对。你应该真的,真的阅读documentation。
有人请在
[(empty? lst) empty]
之后翻译代码
那只是询问我们递归遍历的列表是否为空,如果是,则返回一个空列表 - 返回列表的任何递归过程的基本情况。该过程只是构建一个列表作为结果,因为cons
元素成对,最后一对以空列表结束,产生一个正确的列表。基本上,这是您在Scheme中构建列表的方式:
(cons 1 (cons 2 (cons 3 empty)))
=> '(1 2 3)