Scheme 格式中defsetf的等价形式

Scheme 格式中defsetf的等价形式,scheme,common-lisp,Scheme,Common Lisp,在Common Lisp的defsetf方案中是否有一个等价物?我认为没有。我认为defsetf允许您在Lisp中执行类似(setf(car x)5)的操作,即使用函数的结果作为l值。但在Scheme中,他们必须定义单独的变异函数,比如set car和设置cdr,以完成相同的任务;上面的示例是(set car!x 5)我很确定标准(RnRS)方案中没有等效的方案,但是,一些方案实现支持该方案,允许您为通用位置定义设置器。您在CL中也需要这些函数(例如,rplaca)-->code>setf只是扩

在Common Lisp的
defsetf
方案中是否有一个等价物?

我认为没有。我认为
defsetf
允许您在Lisp中执行类似
(setf(car x)5)
的操作,即使用函数的结果作为l值。但在Scheme中,他们必须定义单独的变异函数,比如
set car
设置cdr,以完成相同的任务;上面的示例是
(set car!x 5)

我很确定标准(RnRS)方案中没有等效的方案,但是,一些方案实现支持该方案,允许您为通用位置定义设置器。

您在CL中也需要这些函数(例如,
rplaca
)-->code>setf
只是扩展到它们的语法。请注意,srfi-17使用的是访问器的运行时值,而不是表单本身。这是一个微小的区别,但也可能很重要(通常意味着它会稍微慢一点,并且更灵活一点)。