带类型单位的函数
Function that takes type unit
我正在尝试创建一个具有以下类型的函数:
unit -> (int list * int list * int list)
但我想知道,unit 是一个空类型(没有值),所以怎么可能用它和 return 3 int 列表做点什么?
谢谢
类型unit
不为空。
它有一个拼写为 ()
的值,通常称为 "unit",就像它的类型一样。
("unit" 这个词的一个意思是 "a single thing"。)
示例:
- ();
val it = () : unit
- val you_knit = ();
val you_knit = () : unit
- fun foo () = ([1], [2], [3]);
val foo = fn : unit -> int list * int list * int list
- foo ();
val it = ([1],[2],[3]) : int list * int list * int list
- foo you_knit;
val it = ([1],[2],[3]) : int list * int list * int list
(注意 ()
不是空参数列表;ML 没有参数列表。)
严格来说,上述定义模式匹配值()
。
如果没有模式匹配,它可能看起来像这样:
- fun bar (x : unit) = ([1], [2], [3]);
val bar = fn : unit -> int list * int list * int list
- bar ();
val it = ([1],[2],[3]) : int list * int list * int list
在 SML 中,类型 unit
通常代表一个 input/output 动作,或者更笼统地说是一些涉及副作用的东西。您正在寻找的那种函数的一个比较现实的例子是 returns 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
典型的 "run" of 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
我正在尝试创建一个具有以下类型的函数:
unit -> (int list * int list * int list)
但我想知道,unit 是一个空类型(没有值),所以怎么可能用它和 return 3 int 列表做点什么?
谢谢
类型unit
不为空。
它有一个拼写为 ()
的值,通常称为 "unit",就像它的类型一样。
("unit" 这个词的一个意思是 "a single thing"。)
示例:
- ();
val it = () : unit
- val you_knit = ();
val you_knit = () : unit
- fun foo () = ([1], [2], [3]);
val foo = fn : unit -> int list * int list * int list
- foo ();
val it = ([1],[2],[3]) : int list * int list * int list
- foo you_knit;
val it = ([1],[2],[3]) : int list * int list * int list
(注意 ()
不是空参数列表;ML 没有参数列表。)
严格来说,上述定义模式匹配值()
。
如果没有模式匹配,它可能看起来像这样:
- fun bar (x : unit) = ([1], [2], [3]);
val bar = fn : unit -> int list * int list * int list
- bar ();
val it = ([1],[2],[3]) : int list * int list * int list
在 SML 中,类型 unit
通常代表一个 input/output 动作,或者更笼统地说是一些涉及副作用的东西。您正在寻找的那种函数的一个比较现实的例子是 returns 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
典型的 "run" of 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