2013-01-23 40 views
2

如何返回列表中的第一个n元素?下面是我有:返回列表的前n个

(define returns(lambda (list n) 
(cond ((null? list) '()) 
(((!= (0) n) (- n 1)) (car list) (cons (car list) (returns (cdr list) n))) 
     (else '())))) 

例子:

(returns '(5 4 5 2 1) 2) 
(5 4) 

(returns '(5 4 5 2 1) 3) 
(5 4 5) 
+0

欢迎来到SE!请格式化您的问题更好,更可读。你想完成什么?想要定义一个返回列表中前N个元素的过程? – 2013-01-23 21:19:36

+0

请在发布之前将您的代码格式化,我这次修复了它,但是真的,如果您希望人们帮助您,那么您应该更加小心。 –

回答

8

你问为take过程:

(define returns take) 

(returns '(5 4 5 2 1) 2) 
=> (5 4) 

(returns '(5 4 5 2 1) 3) 
=> (5 4 5) 

这看起来像功课,所以我想你必须实现它从头开始。一些提示,填入空格:

(define returns 
    (lambda (lst n) 
    (if <???>      ; if n is zero 
     <???>      ; return the empty list 
     (cons <???>    ; otherwise cons the first element of the list 
       (returns <???>  ; advance the recursion over the list 
         <???>))))) ; subtract 1 from n 

不要忘了测试它!

+3

这是一个很好的答案。 – 2013-01-23 21:35:05

+0

R5RS我需要。采取:未定义;不能引用未定义的标识符 – New

+0

@新然后自己实现它,如上所示。我不会这样做,因为这看起来像一个家庭作业,这取决于你。 –