什么是 setf,它是 Dr.Racket 中的有效函数吗?

What's setf and is it a valid function in Dr.Racket?

我有一个作业,其中我必须为表达式定义别名,在其中一个指南中,我们被告知使用 setf 或列表列表来定义它们。更具体地说,我们需要为别名 ADD/SUCC/PRED/etc 分配它们的 lambda 演算值,例如 ---> (ADD := (λ m n f x. n f (m f x))) <----.

这样,所以在任何给定的操作中用别名替换它们之后,我们就可以操作它们了。由于我没有找到任何清晰的解释,而且我不知道如何继续使用 setf,如果你们中的任何人能给我提示,我会发现它真的很有帮助。

到目前为止,要更改我使用条件的值,如果任何符号等于我需要替换的词,它就会执行,但我似乎效率不高。

setf 是一个 Common Lisp 宏。它不存在于 DrRacket 提供的默认语言中。

你可能是指 set!set-car!set-cdr! 如果你真的是说它应该与 Racket 一起工作,它是 Scheme 的后代。

因为 Racket 有很多抽象层次,你可以在其中实现任何表面语法,所以实现 Common Lisp 并不遥不可及,然后你当然应该能够使用 setf:-)