方案中是否可以检查列表是正确还是不正确?

时间:2017-09-26 22:20:11

标签: list scheme lisp

我正在尝试创建检查列表是正确还是不正确的功能。在互联网上找不到任何解决方案。这可能吗?

例如,我们使用list?代码:

(define (proper-list? list) 
  (cond
    ((list? list) '(it's a proper list)) 
    (else '(it's an improper list))))

(proper-list? '(a b c))
; -> (it's a proper list) - OK   
(proper-list? '(a b . c))
; -> (it's an improper list) - OK   
(proper-list? '(a . b))
; -> (it's an improper list)   
; - NOT OK. it should return (it's a pair)  

如何区分不正确的列表?

1 个答案:

答案 0 :(得分:0)

函数list?检查列表是否正确:

(list? '(1 2 3))   ; ==> #t
(list? '(1 2 . 3)) ; ==> #f

在函数中使用此选项可返回规范中的两个列表中的任何一个。

编辑

由于奇怪的要求(a . b)不会被视为不合适的列表,我认为您应该在cond中添加一个额外的术语,以区分链中的两个不正确的列表,而不是使用pair?中的cdr链中的一对。 (pair? (cdr '(a . b)) ; ==> #f(pair? (cdr '(a b . c)) ; ==> #t