scheme - 如何获取列表的第 N 个元素

标签 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 但我不知道如何。

谢谢。

最佳答案

它要简单得多,请记住 - 您应该尝试从功能上思考。在 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)))))

关于scheme - 如何获取列表的第 N 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229422/

相关文章:

lisp - 使用 ASDF 启动 Hunchentoot

clojure - AND 一个 bool 值和一个列表

functional-programming - 读SICP的前置条件是什么?

prolog - 逻辑编程中如何处理重复更新?

debugging - 在 Racket 中设置断点?

lisp - Lisp 中的默认编程

scheme - Racket 上的回溯问题

带有 usocket 库的 Common Lisp 中的 WebSocket 客户端

lisp - clisp中atoi对应的标准函数是什么?

deployment - 需要反馈 : non-disruptive deployment strategies for production Lisp webapps