【问题标题】:Need help understanding lists in Scheme需要帮助理解 Scheme 中的列表
【发布时间】:2013-11-10 23:44:55
【问题描述】:

我无法理解 Scheme 如何形成然后检测列表。它如何确定列表和点对之间的区别?

【问题讨论】:

  • This answer 到 Recursive range in Lisp adds a period? 包括对如何在 Scheme(和其他 Lisps)中使用对来实现列表的解释。不过,目前还不清楚你在这里问什么。一个列表要么是空列表(),要么是一对,其car 是列表的第一个元素,而cdr 是列表的其余部分(另一个列表)。
  • 你的previous question呢?你完成了吗?如果是这样,您可以接受其中一个答案,向本网站上的其他参与者发出信号。 :)

标签: list scheme


【解决方案1】:

列表结构由对组成。正确的列表是一对链,其中最后一对的cdr为空列表。我们可以像这样制作list?:

(define (list? lst)
  (cond ((null? lst) #t)
        ((pair? lst) (list? (cdr lst)))
        (else #f)))

或者你可以使用和/或:

(define (list? lst)
  (or (null? lst)
      (and (pair? lst)
           (list? (cdr lst)))))

【讨论】:

  • 不应该。 cond 返回 #t 或 #f 表示逻辑连接符是有序的。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 2019-07-17
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多