В SML типа unit
часто представляет собой выходное воздействие или, в более общем-то, что включает в себя побочные эффекты ввода /. Несколько реалистичным примером функции того типа, который вы ищете, будет тот, который возвращает 3 случайно сгенерированных списков. Другим примером может быть один, который тянет номера из стандартного ввода что-то вроде:
open TextIO
fun split s = String.tokens (fn c => c = #",") s
fun toInt s = valOf (Int.fromString s)
fun toIntList line = map toInt (split line)
fun getInts prompt =
(
print prompt;
case inputLine(stdIn) of
SOME line => toIntList line |
NONE => []
)
fun getLists() =
let
val prompt = "Enter integers, separated by a comma: "
in
(getInts prompt, getInts prompt, getInts prompt)
end
Тип getLists
является
val getLists = fn : unit -> int list * int list * int list
типичный "прогон" getLists
:
- getLists();
Enter integers, separated by a comma: 1,2,3
Enter integers, separated by a comma: 4,5,6
Enter integers, separated by a comma: 7,8,9
val it = ([1,2,3],[4,5,6],[7,8,9]) : int list * int list * int list
Да, Синтаксис '()' немного вводит в заблуждение, поскольку это фактическое значение. –