我想创建一个函数来获取列表的第N个第一个元素。
例如:
>>(firsts 3 '(a b c d e))
返回:(a b c)
我做到了:
(define (firsts number lst)
(let ((maliste '()))
(if (equal? 0 number)
maliste
(and (set! maliste (cons (car lst) maliste)) (firsts (- number 1) (cdr lst))))))
但它不起作用,我想我应该使用let但我不知道如何。
谢谢。
答案 0 :(得分:3)
这简单得多,请记住 - 你应该尝试在功能上思考。在Lisp中,不鼓励使用set!
(或其他改变状态的操作),递归解决方案是自然的方法。假设列表中有足够的元素,这应该有效:
(define (firsts number lst)
; as an exercise: add an extra condition for handling the
; case when the list is empty before the number is zero
(if (equal? 0 number)
'()
(cons (car lst)
(firsts (- number 1) (cdr lst)))))