Scheme 争拗:争论的数量

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个节点的树,如下所示: ;;

我试图在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:“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))