0

我无法在方案中定义一些代码。我正在尝试为 Scheme/Racket 中的节点创建记录,到目前为止,我的代码如下所示:

(define-record-type node

(make-node v l r)
node?
(v tree-value)
(l tree-left)
(r tree-right))

但是-当我尝试执行时,出现以下错误:

define-record-type: expected amutable', immutable',parent', protocol',sealed', opaque',nongenerative', or parent-rtd' clause in: (make-node v l r)

我知道您可以将字段类型定义为可变、不可变等。但我不明白为什么这需要成为构造函数中的一个子句——如果是的话,它应该在哪里?

有人可以解释一下吗

1)如何解决这个错误

2)为什么会出现

4

1 回答 1

0

您的代码不符合R6RS 标准参考文档,可能的定义是:

#!r6rs
(import (rnrs) (rnrs records syntactic))

(define-record-type node (fields v l r))
(define tree-value (record-accessor node 0))
(define tree-left  (record-accessor node 1))
(define tree-right (record-accessor node 2))

或者

#!r6rs
(import (rnrs) (rnrs records syntactic))

(define-record-type node 
  (fields 
   (immutable v tree-value)
   (immutable l tree-left)
   (immutable r tree-right)))

或者

#!r6rs
(import (rnrs) (rnrs records syntactic))

(define-record-type (node make-node node?)
  (fields 
   (immutable v tree-value)
   (immutable l tree-left)
   (immutable r tree-right)))

对于其中任何一个,您将获得:

(define n (make-node 1 2 3))

(display n) (newline)
=> #(struct:node 1 2 3)

(display (node? n)) (newline)
=> #t

(display (tree-value n)) (newline)
=> 1

(display (tree-left n)) (newline)
=> 2

(display (tree-right n)) (newline)
=> 3
于 2013-11-09T22:26:34.967 回答