检查项目是否为列表

时间:2018-07-16 10:07:53

标签: scheme

由于list?不是SICP中的Scheme中的原语,因此我正在寻找其等效原语。我考虑了这些替代方案:-

  • pair?,但它返回#f的{​​{1}}。
  • '()pair?。看起来还可以,但是吗?

有没有更简单的东西?

1 个答案:

答案 0 :(得分:3)

由于列表是()pair?是列表的cdr,因此没有原始值。由于列表不是原始列表,而是对事件与空列表的复合。 list?可以这样定义:

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