diff --git a/Basic-practice-of-FSharp/FunctionSign.fs b/Basic-practice-of-FSharp/FunctionSign.fs new file mode 100644 index 0000000..e959dc8 --- /dev/null +++ b/Basic-practice-of-FSharp/FunctionSign.fs @@ -0,0 +1,40 @@ +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 + +// 数组的签名 +let sum_by_array array: int = array |> Array.sum +// [] -> int + +// 序列的签名 +let sum_by_seq seq: int = seq |> Seq.sum +// seq -> int \ No newline at end of file