2016-07-08 3 views
0

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

Один из наших тестовых вопросов, скорее всего, будет «Что такое тип program programName», но у меня проблемы с пониманием концепции. Я понимаю, какие типы данных есть, но отвечаете ли вы типом данных ввода и трассируете программу со стрелками?

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

p2 x y z = x y!z 

Тип данных для р2:

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

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

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

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

ответ

0

* -> [**] является типом x, * является типом y, num типа z и ** типа результата.

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

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

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