Как определить тип данных для программы?
Я пытаюсь подготовиться к экзамену и чувствую, что слайды лекции меня немного смущают.
Вероятно, одним из наших тестовых вопросов будет "Какой тип программы programName", но у меня возникли проблемы с пониманием концепции. Я понимаю, что такое типы данных, но отвечаете ли вы с типом данных ввода и отслеживаете программу стрелками?
Вот пример чего-то, что меня смущает. Они хотят, чтобы я нашел тип программы p2:
p2 x y z = x y!z
Тип данных для p2:
(*->[**])->*->num->**
Я не понимаю, как они пришли к такому результату, хотя. Это:
- Первая звезда в кортеже, представляющая вход x?
- Второй список из двух звезд в кортеже, представляющий вход y?
- Третья звезда, представляющая... что-то?
- Число, представляющее z?
- Последние две звезды, представляющие результаты программы?
Я ценю любые советы!
1 ответ
* -> [**]
это тип x
, *
это тип y
, num
тип z
а также **
тип результата.
foo -> bar
это тип функции, которая принимает foo
и возвращает bar
а также [baz]
это список baz
s. *
а также **
(и любое другое число *
s) обозначают произвольный тип (с ограничением, что если одинаковое количество *
s появляется несколько раз в типе, он обозначает один и тот же тип каждый раз.
Так x
является функцией, которая принимает значение произвольного типа и создает список другого произвольного типа; y
это значение x
тип аргумента; z
это значение типа num
; и результатом является значение x
Тип результата.