我有一个必须制作的程序:
我已经能够编写一个程序,可以正确地判断树中是否存在某些东西,但如果树中不存在某些东西,它就会中断。
调试消息根本没有帮助。我唯一使用过 car
的地方是 3 个辅助功能。有人可以解释这意味着什么/我应该做什么吗?我一直在修补,但找不到解决办法。
以下是我目前所掌握的内容:
(define (val T)
(car T)
)
(define (left T)
(car (cdr T))
)
(define (right T)
(car (cdr (cdr T)))
)
(define (tree-member-helper? V T)
(if (not (null? (val T)))
(if (< V (val T))
(tree-member-helper? V (left T))
(if (> V (val T))
(tree-member-helper? V (right T))
#t
)
)
'()
)
)
最佳答案
在这一部分:
(not (null? (val T)))
您正在检查值是否不为空。树的典型迭代会检查该值是否为空树。在您的情况下 ()
因为节点 (1 () ())
是一个值为 1 的节点,并且没有空树作为子节点。
首先,当您确定节点不为空时,您可以对其执行 car
和 cdr
(或调用执行此操作的函数)。
现在,为什么我们期望 caddr
在不进行检查的情况下工作,您可能会问。好吧,如果您发送像 '(1 (2) (3))
这样的无效树,它不会发送,并且您会收到类似的错误。您可以通过创建一个检查节点是否确实有效的函数来解决此问题:
(define (valid-node? node)
(and (list? node)
(= (length node) 3)
(number? (car node))))
关于lambda - 汽车异常: () is not a pair,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46231138/