我有一个函数,它接受一个包含两个或三个元素的列表。
;; expecting either ((a b c) d) or ((a b c) d e)
(define (has-third-item ls)
(if (null? (caddr ls))
false
true)
)
但是这段代码失败了
mcar: expects argument of type <mutable-pair>; given ()
在 (null? (caddr ls)) 表达式上。
我也尝试过
(eq? '() (caddr ls))
但它也不起作用。我如何判断是否有第三项?
您不需要 caddr,您需要 (if (null? (cddr ls)) ... 或者只是使用 length 查找列表的长度,并将其与您感兴趣的值进行比较。
终止列表的 '() 将始终位于一对的 cdr 位置,因此在 car 位置( cad+r 会执行此操作)查找它不会高效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)