我用球拍来返回给定树的深度以下是当前代码:

(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/

10-11 17:12