Basic-practice-of-FSharp/Basic-practice-of-FSharp/FunctionSign.fs

40 lines
1.3 KiB
Forth

module FunctionSign
// 函数签名是描述函数的一种标志
// 表达的是 输入类型 -> 输出类型 的标识
// 比如let add_one a = a + 1的函数签名是int -> int
// a的类型由表达式a + 1推断为int
// 该函数签名描述的是函数接受一个int返回一个int
// 函数签名中最后一个箭头处表达的就是返回类型
// 多参数的函数签名如下
let add a b = a + b
// int -> int -> int
// 实际上这是科里化的表达,相当与fun a:int -> fun b:int -> int
// 参数是一个函数的函数签名如下
let apply func value = func value
// ('a -> 'b) -> 'a -> 'b
// 首先('a -> 'b)是func函数的签名,函数参数的签名需要小括号
// 因为编译器无法推断出类型,所以他的类型会被自动泛化,成为泛型,泛型一般带'
// 表达的是接受一个从'a 映射到 'b的函数与一个'a的值,并且映射为'b
// 元组的签名用*
// 比如
let add_by_tuple (a, b) = a + b
// int * int -> int
// 因为元组是集合与集合之间的直积,所以一般用二元运算符*表示
// 列表的签名
let sum_by_list list: int = list |> List.reduce (fun a b -> a + b)
// list<int> -> int
// 数组的签名
let sum_by_array array: int = array |> Array.sum
// []<int> -> int
// 序列的签名
let sum_by_seq seq: int = seq |> Seq.sum
// seq<int> -> int