我正在尝试手动在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个参数,所以我看不出问题所在。
答案 0 :(得分:0)
您对node
的定义似乎有些奇怪:
(define-struct node
(list : childs
class attribute type ))
它定义了一个包含6个成员的结构:list
,:
,childs
,class
,attribute
和type
。
它定义了一个node
构造函数,它需要这6个参数,但是你只用4个参数调用构造函数:
(node '((node null 'round 'yes null) (node null 'square 'yes null))
'shape null null))
我猜你的意思是childs
,class
,attribute
和type
。
当您采取" list :
"在结构定义之外,您遇到的下一个问题是您可能想要传递两个node
的列表作为第一个参数。相反,您传递的是两个列表的列表,每个列表包含符号node
和null
,后跟列表(quote round)
或(quote square)
等。因为你使用引号('
)运算符而不是quasiquote。试试这个:
(node `(,(node null 'round 'yes null) ,(node null 'square 'yes null))
'shape null null))