Functional programming 球拍中的二叉树

Functional programming 球拍中的二叉树,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,嗨,问题是我想看看二叉树是不是N 我们称之为二叉树,其中N是包含所有节点列表的数字数。例如,这是一个二叉树2: ”((12)((710)((24)空零)((68)((1013)空零)空)) 这是一个二叉树1: ”(2-(7-(2空)(6(5空)(11空))(5空(9(4空))空)) 我有以下代码: (define (abN? arbol N) ( cond [(= (length (list-ref list 0)) N) "Arbol Bi

嗨,问题是我想看看二叉树是不是N

我们称之为二叉树,其中N是包含所有节点列表的数字数。例如,这是一个二叉树2:

”((12)((710)((24)空零)((68)((1013)空零)空))

这是一个二叉树1:

”(2-(7-(2空)(6(5空)(11空))(5空(9(4空))空))

我有以下代码:

(define (abN? arbol N) (                        

cond

[(= (length  (list-ref list 0)) N) "Arbol Binario N" "No es un arbol binario N" ]

[(= (number? (car list)) N) "Arbol Binario 1" "No es un arbol binario 1" ]

) 
)
然后将其放入控制台:

(abN?'((12)((710)((24)空零))((68)((1013)空零)空)2)

告诉我这个错误

car: contract violation
expected: pair?
given: #<procedure:list>
car:违反合同
期望:一对?
鉴于:#
我错了什么


谢谢。

您的代码中有几个错误,请尝试以下操作:

(define (abN? arbol N) 
  (cond
    [(number? (car arbol))
     (if (= N 1)
         "Arbol Binario 1"
         "No es un arbol binario 1")]
    [(list? (car arbol))
     (if (= (length (car arbol)) N)
         "Arbol Binario N" 
         "No es un arbol binario N")]
    [else (error "Dato de entrada incorrecto")]))
说明:

  • 该参数名为
    arbol
    ,但在代码中,您将其称为
    list
    (顺便说一下,它是一个内置函数)。这就是导致报告错误的原因
  • 无需使用
    list ref
    访问列表的第一个元素,而是使用
    car
  • 您误解了
    cond
    表达式的工作原理。每个条件的计算结果都是它后面表达式的最后一个值,如果需要测试进一步的条件,则必须在内部使用
    if
    或另一个
    cond
    ,您似乎认为每个条件都有一个隐式
    if else
    条件,这是不正确的
  • 首先,必须验证列表中第一个元素的类型,否则可能会对数字应用列表函数,从而导致错误
  • 最后,如果你用英语发布代码,会更容易帮助你。我能听懂西班牙语:P,但这里的大多数人不会
对于可能的输入,它按预期工作:

(abN? '(1 ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 1)
=> "Arbol Binario 1"
(abN? '(1 ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 2)
=> "No es un arbol binario 1"
(abN? '((1 2) ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 2)
=> "Arbol Binario N"
(abN? '((1 2) ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 3)
=> "No es un arbol binario N"
(abN? '("bogus" ( (7 10) ( (2 4) null null) ) ((6 8) ((10 13) null null) null)) 3)
=> Unknown input

谢谢你的帮助,现在我能很好地理解了