Как определить тип данных для программы?

Я пытаюсь подготовиться к экзамену и чувствую, что слайды лекции меня немного смущают.

Вероятно, одним из наших тестовых вопросов будет "Какой тип программы programName", но у меня возникли проблемы с пониманием концепции. Я понимаю, что такое типы данных, но отвечаете ли вы с типом данных ввода и отслеживаете программу стрелками?

Вот пример чего-то, что меня смущает. Они хотят, чтобы я нашел тип программы p2:

p2 x y z = x y!z

Тип данных для p2:

(*->[**])->*->num->**

Я не понимаю, как они пришли к такому результату, хотя. Это:

  • Первая звезда в кортеже, представляющая вход x?
  • Второй список из двух звезд в кортеже, представляющий вход y?
  • Третья звезда, представляющая... что-то?
  • Число, представляющее z?
  • Последние две звезды, представляющие результаты программы?

Я ценю любые советы!

1 ответ

Решение

* -> [**] это тип x, * это тип y, num тип z а также ** тип результата.

foo -> bar это тип функции, которая принимает foo и возвращает bar а также [baz] это список bazs. * а также ** (и любое другое число *s) обозначают произвольный тип (с ограничением, что если одинаковое количество *s появляется несколько раз в типе, он обозначает один и тот же тип каждый раз.

Так x является функцией, которая принимает значение произвольного типа и создает список другого произвольного типа; y это значение xтип аргумента; z это значение типа num; и результатом является значение xТип результата.

Другие вопросы по тегам