文件名称:数据定义-1985-2020历年数学建模美赛赛题(中文版)
文件大小:3MB
文件格式:PDF
更新时间:2024-07-13 19:24:25
程序设计 方法 架构 编程 面向对象
6.4 数据定义 表达式 (make-posn 'Albert 'Meyer) 构造一个 posn结构体,该结构体包含两个符号。如果将函数 distance-to-0应用于该结构体,计算将以失败 告终: (distance-to-0 (make-posn 'Albert 'Meyer)) = (sqrt (+ (sqr (posn-x (make-posn 'Albert 'Meyer))) (sqr (posn-y (make-posn 'Albert 'Meyer))))) = (sqrt (+ (sqr 'Albert) (sqr (posn-y (make-posn 'Albert 'Meyer))))) = (sqrt (+ (* 'Albert 'Albert) (sqr (posn-y (make-posn 'Albert 'Meyer))))) 此时表达式要求'Albert和自己相乘,产生错误,类似地 (make-star 'Albert 'Meyer 10000 'electric-organ) 不会产生一个 star结构体,特别地,它不能被 increment-sales 所处理。 为了避免此类问题,Scheme给每个结构体定义加上一个数据定义,它以自然语言和 Scheme语言相混 合的形式说明了程序设计者应该如何使用和构造此类结构体数据。这是 posn结构体的数据定义: 它说明一个合法的 posn结构体包含两个数,而不是别的东西。因此,欲创建一个 posn结构体,必须将构 造函数应用于两个数,施用选择器于 posn结构体的结果是数。 Star结构体的数据定义稍许有点复杂: 这个数据定义说明,一个有效的 star 结构体的 last、first 和 instrument 字段的值皆为符号,而 sales 字段的 值为数。 star是结构体: (make-star last first instrument sales) 其中 last、first和 instrument是符号,而 sales是数。 posn是结构体: (make-posn x y) 其中 x和 y是数。