两个DrRacket /计划问题

时间:2011-10-24 08:52:30

标签: scheme racket

编程语言:DrRacket / scheme

嘿伙计们,

我正准备参加我的第一部中期短片,并有两个快速的问题,我很乐意得到一些意见:

(1)数据定义和a之间究竟有什么区别?     结构定义?

我知道对于数据定义,我可以有类似的东西:

;; 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)函数之前的合同中的alpha和beta究竟是什么,即

take : num α-list -> α-list

提前谢谢!

2 个答案:

答案 0 :(得分:4)

引用如何设计程序(HtDP):

  

数据定义说明了英语和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应该是字符串,并且预期价格是一个数字,你必须写下一个数据定义来解释如何使用make-cd。

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

  

(2)合同中的alphas和beta究竟是什么?   在功能之前,即

     

take:numα-list - > α-列表

alpha应该被替换为类型。

如果获取整数列表(整数列表作为输入),则输出为整数列表。

如果获取字符串列表(字符串列表作为输入),则输出为字符串列表。

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

答案 1 :(得分:2)

Jens Axel Soegaard的答案是正确的,但没有详细说明两者之间的关系,我将在下面说明。

DATA DEFINITION向读者描述了如何使用Racket值表示值。

有时候,“内置”值是不够的,我们需要定义一种新的数据,比如Jens所指的“CD”。为了定义一种新的数据,我们经常使用结构定义。

换句话说:某些数据定义需要结构定义。有些人没有。

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