Scheme 争拗:争论的数量
我试图在Racket中手动实现一个决策树,看看它是如何工作的。 我有这样的结构:Scheme 争拗:争论的数量,scheme,racket,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个节点的树,如下所示: ;;
(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:“node null”round“yes null node null”square“yes null”shape“”,但我的节点应该有4个参数,所以我看不出问题出在哪里。您对节点的定义似乎有点奇怪:
(define-struct node
(list : childs
class attribute type ))
它定义了一个包含6个成员的结构:list、:、child、class、attribute和type
它定义了一个需要这6个参数的节点构造函数,但您仅使用4个参数调用该构造函数:
(node '((node null 'round 'yes null) (node null 'square 'yes null))
'shape null null))
我猜你的意思是那些是child、class、attribute和type
当您将list:从结构定义中取出时,您将遇到的下一个问题是,您可能希望将包含两个节点的列表作为第一个参数传递。相反,您传递的是一个包含两个列表的列表,每个列表包含符号节点和null,后跟列表引号圆形或引号方形,等等。这一切都是因为您使用了引号运算符而不是准引号。试试这个:
(node `(,(node null 'round 'yes null) ,(node null 'square 'yes null))
'shape null null))