如何设置!在方案中定义?

问题描述 投票:1回答:6

您将如何在Scheme中实现自己的set!函数? set!函数是一种破坏性过程,会更改考虑到先前值而定义的值。

lisp scheme
6个回答
7
投票

如注释中所述,set!是Scheme中必须由实现提供的原语。同样,您无法在大多数编程语言中实现赋值运算符set!。在Common Lisp中,可以扩展=(使用setf-扩展器)以允许setf处理新的表格。

因为Scheme的(setf form value)仅修改变量绑定(例如Common Lisp的set!),所以仍然值得问一下如何实现类似setq和其他结构修饰符的函数。从某种意义上讲,这可以看作是对变量的赋值[[generalization,但是由于词汇变量(以及闭包)足以表示任意复杂的结构,因此也可以将其视为更[案例。在Scheme中(除了诸如数组之类的内置基元之外),对象字段的变异是specialization,因为可以通过词法闭包来实现对象,并根据set-car!来实现。这是一个典型的练习,展示了如何单独使用词汇闭包来实现结构(例如cons单元格)。这是一个显示单值可变单元格实现的示例::set!

根据这些定义,我们可以创建一个以值(define (make-cell value) (lambda (op) (case op ((update) (lambda (new-value) (set! value new-value))) ((retrieve) (lambda () value))))) (define (set-value! cell new-value) ((cell 'update) new-value)) (define (get-value cell) ((cell 'retrieve))) 开头的单元格,使用我们的4将其值更新为8,并获取新值:
set-value!

6
投票

4
投票

2
投票

0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.