2011-10-24 2 views
1

Язык программирования: DrRacket/СхемаДва DrRacket/схема вопросы

Эй, ребята,

Я готовился к своей первой Comp научной среднесрочному и два коротких вопроса, которые я хотел бы получить некоторый входной сигнал на :

(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) Какие именно альфа и бета в контрактах, которые приходят, прежде чем функции, т.е.

take : num α-list -> α-list 

Спасибо заранее!

+0

Это не вопрос Схемы/Ракетки, поскольку речь идет о соглашениях при разработке программ и связанной с ними терминологии (похоже, вы не используете Typed Racket, и в этом случае функциональные контракты являются только комментариями) , Если вы готовитесь к среднесрочной перспективе, лучшие люди могут ответить на этот вопрос, это ваш учитель, ТА или одноклассники. –

ответ

4

Цитата Как разрабатывать программы (HTDP):

ПЕРЕДАЧИ ДАННЫХ ОПРЕДЕЛЕНИЕ состояния, в смеси английского и схемы, как мы намерены использовать класс структур и как мы строим элементы этот класс данных.

Учитывая проблему, которую вы решаете в качестве программиста, необходимо решить, как ваши входные данные представлены в виде значений. Для того, чтобы другие могли понять вашу программу, важно документировать, как это делается в деталях.

Некоторые входные данные просты и могут быть представлены одним числом (например, температурой, давлением и т. Д.).

Другие типы данных могут быть представлены как фиксированное количество чисел/строк. (например, cd может быть представлено как имя автора (строка), заголовок (строка) и цена (число)). Чтобы упаковать фиксированное число значений в виде одного значения, можно представить эту структуру.

Если нужно представить неизвестное количество чего-либо, скажем, cds, то нужно использовать список.

Определение данных - это просто ваше описание того, как данные представлены в вашей программе.

Чтобы объяснить, что такое определение структуры, я процитирую из HTDP:

СТРУКТУРА ОПРЕДЕЛЕНИЕ является, как этот термин говорит, новая форма определения. Здесь> является определение DrScheme о POSN:

(define-struct posn (x y)) 

Давайте посмотрим на пример кд снова. Поскольку в Racket нет встроенных «значений cd», нужно определить, что такое cd-значение. Это делается с определением структуры:

(define-struct cd (author title price)) 

После определения производится можно использовать косметику кд построить значение кд. Чтобы объяснить, что автор и заголовок должны быть строками, и ожидается, что цена будет номером, вы должны записать определение данных, в котором объясняется, как make-cd предполагается использовать.

Я забыл ответить на ваш второй вопрос:

(2) Какие именно альфы и беты в контрактах, которые приходят до функций, т.е.

берут: Num α-лист -> α -list

Предполагается, что альфа заменена на тип.

Если взять целочисленный список (список целых чисел в качестве входных данных), то вывод будет целым списком.

Если взять строковый список (список строк в качестве ввода), то вывод будет строковым списком.

Короче говоря, если элемент принимает список значений с некоторым типом (альфа) в качестве входных данных, то вывод представляет собой список значений с одним и тем же типом (alsp alpha).

2

Ответ Йенса Акселя Соегора верен, но не уточняет связь между этими двумя, что я хотел бы сформулировать следующим образом.

ОПИСАНИЕ ДАННЫХ описывает читателю, как значение будет отображаться с использованием значений Racket.

Иногда «встроенных» значений недостаточно, и нам необходимо определить новый тип данных, например «компакт-диск», на который указывает Йенс. Чтобы определить новый тип данных, мы часто используем ОПРЕДЕЛЕНИЕ СТРУКТУРЫ.

По-другому: некоторые определения данных требуют определения структуры. Некоторые этого не делают.

Если бы я уже подробно разбирался, я бы просто плохо пересказывал HtDP; если то, что я сказал до сих пор, не имеет смысла, идите читать HtDP. :)

Смежные вопросы