Scheme 获得“的效果”;设定&引用;不用它

Scheme 获得“的效果”;设定&引用;不用它,scheme,Scheme,我已经定义了railroad1和station1,我想在不使用set的情况下更新railroad1的值!或者另一个定义。例如: (define railroad1 (list 1991)) (define station1 (list "station")) (define (add-station railroad station) (append railroad station) ) 当我打电话(添加车站railroad1 station1)时,我得到 现在我可以这样做: (def

我已经定义了railroad1和station1,我想在不使用set的情况下更新railroad1的值!或者另一个定义。例如:

(define railroad1 (list 1991))
(define station1 (list "station"))

(define (add-station railroad station)
  (append railroad station)
)
当我打电话(添加车站railroad1 station1)时,我得到

现在我可以这样做:

(define railroad1 (add-station railroad1 station1))
因此,railroad1现在是(1991年的“车站”),而不仅仅是(1991年)

然而,我的最终目标是能够打电话

(add-station railroad1 station1)
并将railroad1重新定义为(1991年“车站”),而无需如上所述明确重新定义railroad1,也无需使用set!要么

编辑:设置汽车!,设置cdr!,其他类似的特殊形式也不允许


有什么方法可以做到这一点吗?

是的,如果允许您使用
设置cdr

(set-cdr! railroad1 station1)

是的,如果允许您使用
设置cdr

(set-cdr! railroad1 station1)

如果您使用let语句呢?这样,您可以在let中设置railroad1和station1的初始值,然后可以通过再次调用let来更新它。作用域应该使您的变量在集合中“安全”!。我希望看到更多您编写的类似于此函数的代码添加您在第二行中调用的电台。

如果使用let语句会怎么样?这样,您可以在let中设置railroad1和station1的初始值,然后可以通过再次调用let来更新它。作用域应该使您的变量在集合中“安全”!。我很想看到更多您编写的代码,比如这个函数添加您在第二行中调用的电台。

这应该可以:

(define-syntax add-station
  (syntax-rules ()
    ((_ railroad station) (define railroad (append railroad station)))))
编辑

对不起,没有注意到作业标签。我来解释答案

define syntax
生成所谓的宏。宏的工作方式与普通函数不同。它们不计算操作数,而是直接用宏体替换宏调用。
语法规则中的
表示宏的原始名称,即
添加站
。所以当你打电话的时候

(add-station railroad1 station1)
它被直接替换为

(define railroad1 (append railroad1 station1))
然后执行

希望这有帮助

这应该有效:

(define-syntax add-station
  (syntax-rules ()
    ((_ railroad station) (define railroad (append railroad station)))))
编辑

对不起,没有注意到作业标签。我来解释答案

define syntax
生成所谓的宏。宏的工作方式与普通函数不同。它们不计算操作数,而是直接用宏体替换宏调用。
语法规则中的
表示宏的原始名称,即
添加站
。所以当你打电话的时候

(add-station railroad1 station1)
它被直接替换为

(define railroad1 (append railroad1 station1))
然后执行


希望这有帮助

抱歉,我忘记指定:我们无法使用set!,设置cdr!,或者把车停下来!,或任何其他变化的设置!我不知道。对不起,我忘了指定:我们不能使用set!,设置cdr!,或者把车停下来!,或任何其他变化的设置!我不知道。我想你误解了你的家庭作业。绝对有办法建立一套模型!不使用它们的情况下进行变异,但您描述的设置似乎将它们隔离开来。我想,如果允许您导入一个宏定义来更改“define”的含义……在许多方案系统中,
define
是一个用
set替换的宏define
是一个用
set替换的宏