2013-03-11 58 views
-3

请帮助我在计划中的代码基本上我需要的是如下 函数(追加)需要一个原子和一个列表,并将元素添加到列表的末尾。指导与计划

实施例:

(append 'A '(B C D)) -> (B C D A) 

回答

2

递归的方法是:

(define (append atom lst) 
    (if (empty? lst) 
     (list atom) 
     (cons (car lst) (append atom (cdr lst))))) 

用法:

> (append 'A '(B C D)) 
'(B C D A) 

这相当于

> (cons 'B (cons 'C (cons 'D (list 'A)))) 
'(B C D A) 
+0

也许是最好不要使用标准的叫法。这被广泛地称为“snoc”操作('cons'的反转*)。 – 2013-03-11 14:10:13

+0

我完全同意,但我试图坚持他的问题/例子,以便他能理解我的答案。 – uselpa 2013-03-11 14:12:16

+1

这个问题看起来像一个家庭作业和庸医,就像一个家庭作业,请不要勺子喂给OP的答案,如果你向他/她解释如何通过他自己的方式解决它,而不是给一个直回答 – 2013-03-11 14:34:34

0

您可以添加到列表这样的结尾:

(append '(B C D) (list 'A))) 

Append需要一个list参数作为第一个参数。第二个参数并不一定是一个列表,但它会显示为(B C D . A)如果你(append '(B C D) 'A))

My Example

+1

我想他需要定义过程追加,而不是使用内置的一个。 – uselpa 2013-03-11 13:50:37

+0

@uselpa可能是这种情况。由于在示例中append的使用不正确,所以我发布了它。 – 2013-03-11 13:53:18

+1

这就是为什么我相信他不应该使用内置程序。 – uselpa 2013-03-11 13:55:42