球拍:参数数量

时间:2015-03-14 15:21:09

标签: scheme racket

我正在尝试手动在Racket中实现决策树以查看其工作原理。 我有这个结构:

(define-struct node
  (list : childs
        class attribute type ))

和我的职能:

(define tree-1 
  (node '((node null 'round 'yes null) (node null 'square 'yes null)) 'shape null null))

基本上我想要一个包含3个节点的树,如下所示:

;;    shape
;;     / \
;; round square
   (yes)  (no)

"是"和"不"表示每个属性的类。

我收到以下错误: 节点:需要6个参数,给定4:'((节点null' round' yes null)(节点null' square' yes null))&# 39; shape'()'()但我的节点应该有4个参数,所以我看不出问题所在。

1 个答案:

答案 0 :(得分:0)

您对node的定义似乎有些奇怪:

(define-struct node
  (list : childs
        class attribute type ))

它定义了一个包含6个成员的结构:list:childsclassattributetype

它定义了一个node构造函数,它需要这6个参数,但是你只用4个参数调用构造函数:

(node '((node null 'round 'yes null) (node null 'square 'yes null))
      'shape null null))

我猜你的意思是childsclassattributetype

当您采取" list :"在结构定义之外,您遇到的下一个问题是您可能想要传递两个node的列表作为第一个参数。相反,您传递的是两个列表的列表,每个列表包含符号nodenull,后跟列表(quote round)(quote square)等。因为你使用引号(')运算符而不是quasiquote。试试这个:

(node `(,(node null 'round 'yes null) ,(node null 'square 'yes null))
      'shape null null))