【问题标题】:Two DrRacket/scheme questions两个 DrRacket/方案问题
【发布时间】:2011-10-24 08:52:30
【问题描述】:

编程语言:DrRacket/方案

大家好,

我正在为我的第一个 comp sci 期中考试做准备,有两个小问题想请教一下:

(1) 数据定义和数据定义到底有什么区别? 结构定义?

我知道对于数据定义,我可以有如下内容:

;; a student is a 
;; - (make-student ln id height gradyear), where 
;; - ln is last name, and
;; - id is ID number, and
;; - height is height in inches, and
;; -gradyear is graduation year

但什么是结构定义?

(2) 函数之前的合约中的 alphas 和 betas 究竟是什么,即

take : num α-list -> α-list

提前谢谢你!

【问题讨论】:

  • 这不是一个 Scheme/Racket 问题,而是一个关于设计程序时的约定和相关术语的问题(看起来你没有使用 Typed Racket,在这种情况下,函数契约是只有cmets)。如果您正在准备期中考试,回答此类问题的最佳人选是您的老师、助教或同学。

标签: scheme racket


【解决方案1】:

引自 How to Design Programs (HtDP):

A DATA DEFINITION 以英语和 Scheme 的混合形式说明我们如何 打算使用一类结构以及我们如何构造 这类数据。

作为程序员,如果您要解决一个问题,您必须决定如何将您的输入数据表示为值。为了让其他人了解您的程序,重要的是要详细记录这是如何完成的。

一些输入数据很简单,可以用单个数字表示(例如温度、压力等)。

其他类型的数据可以表示为固定数量的数字/字符串。 (例如,一张 cd 可以表示为作者姓名(字符串)、标题(字符串)和价格(数字))。要将固定数量的值打包为一个值,可以将其表示为一个结构。

如果需要表示未知数量的东西,比如 cds,那么就必须使用列表。

数据定义只是您对数据在程序中的表示方式的描述。

为了解释什么是结构定义,我将引用 HtDP:

正如术语所说,结构定义是一种新的定义形式。 这里>是 DrScheme 对 posn 的定义:

(define-struct posn (x y))

让我们再看看 cd 的例子。由于 Racket 中没有内置的“cd 值”,因此必须定义 cd 值是什么。这是通过结构定义完成的:

(define-struct cd (author title price))

定义完成后,可以使用 make-cd 来构造 cd 值。 为了解释 autor 和 title 应该是字符串,而 price 应该是一个数字,你必须写下一个数据定义来解释 make-cd 应该如何使用。

我忘了回答你的第二个问题:

(2) 即将到来的合约中的 alpha 和 beta 究竟是什么 在函数之前,即

take : num α-list -> α-list

alpha 应该被替换为类型。

如果获取一个整数列表(整数列表作为输入),那么输出就是一个整数列表。

如果获取一个字符串列表(字符串列表作为输入),那么输出就是一个字符串列表。

简而言之,如果 take 获取具有某种类型 (alpha) 作为输入的值列表,则输出是具有相同类型 (alsp alpha) 的值列表。

【讨论】:

    【解决方案2】:

    Jens Axel Soegaard 的回答是正确的,但没有详细说明两者之间的关系,我将陈述如下。

    数据定义向读者描述了如何使用球拍值来表示一个值。

    有时,“内置”值是不够的,我们需要定义一种新的数据类型,例如 Jens 所指的“CD”。为了定义一种新的数据,我们经常使用 STRUCTURE DEFINITION。

    换一种说法:一些数据定义需要结构定义。有些没有。

    如果我要再详细说明,我只会严重概括 HtDP;如果到目前为止我所说的没有意义,请阅读 HtDP。 :)

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2011-01-23
      相关资源
      最近更新 更多