我正在尝试创建检查列表是正确还是不正确的功能。在互联网上找不到任何解决方案。这可能吗?
例如,我们使用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)
如何区分不正确的列表?
答案 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