如何获得列表的第一个元素

时间:2016-05-14 16:55:40

标签: scheme lisp

我想创建一个函数来获取列表的第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但我不知道如何。

谢谢。

1 个答案:

答案 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)))))