我用球拍来返回给定树的深度以下是当前代码:
(define (depth tree)
(cond
[(empty? tree) 0]
[else
(+ 1 (max (depth (cadr tree))
(depth (caddr tree))))]))
但我还没能测试它,因为我总是在违反car和cdr合同的情况下出现运行时错误具体来说,当我尝试
(depth '(1 2 3))
它应该返回1,我遇到:
length: contract violation
expected: list?
given: 2
不管我做什么,问题都会存在,我不允许更改测试用例来解决问题我相信这很简单,但是有人能帮我理解吗?
(我看了其他帖子;有些帖子讨论了深度算法,但我特别询问了这里提到的违反car/cdr合同的情况。)
最佳答案
您的问题的答案包含在您的基本案例中:empty?
什么是'()
它是alist
的结尾所以,如果你想知道深度,你需要确保你在列表中的任何列表中重复出现。
下面是我在阅读代码时要问的问题:如果tree
有一些元素,那么将该元素的最大深度与下一个元素的深度进行比较。你可能想问的是把元素深度的最大值和列表其余部分的深度(这不是caddr
它是cdr
)。所以我假设你想把深度2
设为零(这不是一个列表)如果是,您是否在cond
测试中正确地列出了这种情况嗯。也许有一种方法可以检查某个东西是否是一对,在这种情况下我们会重复,否则它的深度是0。。。
关于tree - 树深:违反汽车/CDR契约(Contract),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48752539/