Два DrRacket / схема вопросов - PullRequest
1 голос
/ 24 октября 2011

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

Привет, ребята,

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

(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

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Цитата из раздела «Как проектировать программы (HtDP)»:

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

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

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

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

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

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

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

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

(define-struct posn (x y))

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

(define-struct cd (author title price))

После определения можно использовать make-cd для построения значений cd.Чтобы объяснить, что autor и title должны быть строками, а price - числом, вы должны записать определение данных, объясняющее, как предполагается использовать make-cd.

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

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

take: num α-list -> α-list

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

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

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

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

2 голосов
/ 25 октября 2011

Jens Axel Soegaard ответ правильный, но не уточняет отношения между ними, что я бы сказал следующим образом.

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

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

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

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

...