sta*_*93m 3 scheme procedure list
我想写自己的'清单?' 计划中的谓词.我知道列表的定义:1.空列表2.对,其cdr是一对
我知道我的代码是错误的,因为它在每对上返回true值,但每对都不是列表.我不知道如何实现列表的cdr也必须是一对的条件.
(define (my-list? x)
(if (equal? x ()) #t
(pair? x)))
Run Code Online (Sandbox Code Playgroud)
该list?过程检查列表是否正确(嵌套的cons-cells以null值结尾),因此我们必须考虑三种情况:
(define (my-list? x)
(cond ((null? x) #t) ; empty list
((pair? x) (my-list? (cdr x))) ; pair, advance recursion
(else #f))) ; atom
Run Code Online (Sandbox Code Playgroud)
一个null值被认为是空列表.如果我们成对,那么我们cdr通过递归调用过程来推进它.如果它不是null也不是一对,它就是一个原子.这将涵盖边缘情况,例如:
(my-list? 42)
=> #f
(my-list? (cons 1 2))
=> #f
Run Code Online (Sandbox Code Playgroud)
并将返回true正确的列表:
(my-list? '())
=> #t
(my-list? (cons 1 (cons 2 '())))
=> #t
Run Code Online (Sandbox Code Playgroud)