Предполагая, что это домашнее задание, я не хочу говорить слишком много. ->
в выражении типа представляет собой функцию. 'a -> 'a -> ('a * 'a)
имеет две стрелки, поэтому 2 может быть ответом на ваш первый вопрос, хотя я нахожу этот конкретный вопрос непонятным. Можно было бы аргументировать, что каждый fun
определяет точно одну функцию, которая может возвращать функцию для ее вывода. Кроме того, вы спрашиваете «сколько функций присутствует в выражении ...», но затем укажите строку, которая буквально имеет 0 функций в ней (описания типов описывают функции, но не содержат функций), так что, возможно, ответ 0.
Если вы хотите естественный пример int -> int -> int * int
, вы могли бы реализовать функцию divmod
где divmod x y
возвращает кортеж, состоящий из частного и остатка от деления x
на y
. Например, вы хотите, чтобы divmod 17 5
возвращал (3,2)
. Это встроенная функция в Python, но не в SML, но ее легко определить в SML с помощью встроенных операторов div
и mod
. Полученная функция имела бы тип формы 'a -> 'a -> 'a*'a
, но для специфический тип (а именно int
). Вы должны сделать что-то, что немного менее естественно (например, что вы сделали в своем ответе на ваш вопрос), чтобы придумать полиморфный пример.
Извините, я понял, что сделал, я имел в виду функцию xy = (x, y) –
Я отредактировал свой вопрос –
Я удалил свой комментарий ... – molbdnilo