可变泛函结构体-1985-2020历年数学建模美赛赛题(中文版)

时间:2024-07-13 19:24:59
【文件属性】:

文件名称:可变泛函结构体-1985-2020历年数学建模美赛赛题(中文版)

文件大小:3MB

文件格式:PDF

更新时间:2024-07-13 19:24:59

程序设计 方法 架构 编程 面向对象

40.2 可变泛函结构体 第 39章以及 40.1节表明结构体是可变的。更确切地说,可以改变结构体中某个字段的值。第 39章介 绍了服务管理器,它隐藏了状态变量,而不仅仅是普通的变量定义。图 40.2显示,图 40.1中定义的一个微 小改变是如何把 local局部定义的变量转化为状态变量的。这个修改后的服务管理器为每个状态变量都提供 两种操作:一个用来读出当前值,另一个用来改变当前值。 (define (fm-make-posn x0 y0) (local ((define x y0) (define y y0) (define (service-manager msg) (cond [(symbol=? msg 'x) x] [(symbol=? msg 'y) y] [(symbol=? msg 'set-x) (lambda (x-new) (set! x x-new))] [(symbol=? msg 'set-y) (lambda (y-new) (set! y y-new))] [else (error 'posn "...")]))) service-manager)) (define (fm-posn-x p) (p 'x)) (define (fm-posn-y p) (p 'y)) (define (fm-set-posn-x! p new-value) ((p 'set-x) new-value)) (define (fm-set-posn-y! p new-value) ((p 'set-y) new-value)) 图 40.2 一个带变化器的 posns实现 考虑如下的定义和表达式: (define a-posn (fm-make-posn 3 4)) (begin (fm-set-posn-x! a-posn 5) (+ (posn-x a-posn) 8)) 对它们进行手工计算显示了结构体是怎样改变的,下面是(手工计算的)第一步: ... = (define x-for-a-posn 3) (define y-for-a-posn 4) (define (service-manager-for-a-posn msg) (cond [(symbol=? msg 'x) x-for-a-posn] [(symbol=? msg 'y) y-for-a-posn] [(symbol=? msg 'set-x) (lambda (x-new) (set! x-for-a-posn x-new))] [(symbol=? msg 'set-y) (lambda (y-new) (set! y-for-a-posn y-new))] [else (error 'posn "...")]))


网友评论