Scheme &引用;设定!:不是:…”中的标识符;plt方案错误

Scheme &引用;设定!:不是:…”中的标识符;plt方案错误,scheme,racket,mutability,Scheme,Racket,Mutability,在Dr.Scheme中使用相当大的?我似乎记得过去做过类似的事情,没有问题 (lambda (x y) (set! (Frame-variables res) (append (Frame-variables res) (list (cons x y))))) 返回以下错误: set!:在:(帧变量res)中不是标识符 如果我省略了(set!(Frame variables res)…部分,它可以正常工作,当然我的列表实际上没有改变。所以它能识别第二个(帧变量res),但不能识别第一个?或者s

在Dr.Scheme中使用相当大的?我似乎记得过去做过类似的事情,没有问题

(lambda (x y) (set! (Frame-variables res) (append (Frame-variables res) (list (cons x y)))))
返回以下错误:

set!:在:(帧变量res)中不是标识符

如果我省略了
(set!(Frame variables res)…
部分,它可以正常工作,当然我的列表实际上没有改变。所以它能识别第二个
(帧变量res)
,但不能识别第一个?或者
set是怎么回事在这种情况下


希望您能认识到我有一个名为
Frame
的结构,其中有一个
变量
字段,它是一个列表。

问题:

太好了!作品它真正做的是将一个名称绑定到一个挂在内存某处的对象上。当你设置好的时候!,它改变了该名称所指的内容

这就是错误:
(Frame variables res)
不是标识符,因此它不能使它引用其他内容

修复方法:

你要做的是变异结构的一个成员。您需要做的是将该结构成员更改为可变的,然后使用将生成的mutator

(define-struct frame (a b ... c [variables #:mutable] e ...))
然后,你可以使用

(set-frame-variables! res (list "new" "value"))
这将根据需要改变您的结构

讲座:

我想知道你是否为你的程序选择了一个好的设计。变异和添加到列表都是让我对Scheme中的设计产生疑问的操作

而且,看起来您正在尝试维护一个变量的关联列表,基于您所称的变量。这并不是很有效,也许你应该考虑一些类似于

的东西。 相关文档:


问题:

太好了!作品它真正做的是将一个名称绑定到一个挂在内存某处的对象上。当你设置好的时候!,它改变了该名称所指的内容

这就是错误:
(Frame variables res)
不是标识符,因此它不能使它引用其他内容

修复方法:

你要做的是变异结构的一个成员。您需要做的是将该结构成员更改为可变的,然后使用将生成的mutator

(define-struct frame (a b ... c [variables #:mutable] e ...))
然后,你可以使用

(set-frame-variables! res (list "new" "value"))
这将根据需要改变您的结构

讲座:

我想知道你是否为你的程序选择了一个好的设计。变异和添加到列表都是让我对Scheme中的设计产生疑问的操作

而且,看起来您正在尝试维护一个变量的关联列表,基于您所称的变量。这并不是很有效,也许你应该考虑一些类似于

的东西。 相关文档:


一般来说,答案不错,但也请参见srfi-17和swindle,它们都提供了这样一个“通用
集!
”。虽然一般来说,如果可以避免的话,不应该使用变异,但这样做有时是有帮助的——广义setter的一个优点是,您可以编写一个
inc宏变得非常有用。一般来说,这是一个很好的答案,但也请参见srfi-17和swindle,它们都提供了这样一个“通用
集!
”。虽然一般来说,如果可以避免的话,不应该使用变异,但这样做有时是有帮助的——广义setter的一个优点是,您可以编写一个
inc非常有用的宏。