Function 提升功能

Function 提升功能,function,functional-programming,f#,lifting,Function,Functional Programming,F#,Lifting,作为一个F新手,我在理解提升这个术语时遇到了问题,我不能正确地提升一个函数 例如,我如何提升下面的函数以及它将如何影响函数行为 let add item element = item :: element 如果有任何帮助,我们将不胜感激。请查看本页,它提供了关于提升理念的最佳解释,并以图形表示 该网站是一个很好的材料宝库,有助于理解F和函数编程 简单地说,lifting的概念指的是获取一个可用于简单类型的函数f,并创建一个可用于泛型类型的新版本liftedF。我们如何做到这一点?我们将函数f传

作为一个F新手,我在理解提升这个术语时遇到了问题,我不能正确地提升一个函数

例如,我如何提升下面的函数以及它将如何影响函数行为

let add item element = item :: element
如果有任何帮助,我们将不胜感激。

请查看本页,它提供了关于提升理念的最佳解释,并以图形表示

该网站是一个很好的材料宝库,有助于理解F和函数编程

简单地说,lifting的概念指的是获取一个可用于简单类型的函数f,并创建一个可用于泛型类型的新版本liftedF。我们如何做到这一点?我们将函数f传递给另一个函数,它返回一个新的改进版本的f。例如,假设您有一个返回整数平方的简单函数:

let square x = x * x    // val square : int -> int
简单对吧?传递一个int,它返回另一个int

现在,让我们创建一个新版本,如下所示:

let squareArray xA = Array.map square xA  // val squareArray : int [] -> int []
哇!squareArray可以对整个整数数组进行平方运算,创建起来非常简单!我所需要做的就是将square传递给Array.map

看看签名,正方形是int->int,正方形数组是int[]->int[]。那是提升

如果您查看Array.map的签名,它是'a->'b->'a[]->'b[] 这可以解释为接收从“a”类型到“b”类型的函数和“a”数组并返回“b”数组。但也可以将其解释为从“a”接收函数到“b”,并将提升函数从“a[]返回到“b[]:

“a->”b->“a[]->”b[]与 “a->”b->“a[]->”b[] 可以将函数提升到任何泛型类型。 什么是泛型?它是一种以另一种类型作为参数的类型,您可能已经知道许多泛型类型:

列表:选项,选项,选项。。。 结果:结果,结果。。。 您可以将函数提升到其他通用类型:

let squareOption xO = Option.map square xO  // val squareOption : int option -> int option
let stringArray  sL = Array.map  string sL  // val stringArray : int [] -> string []
这一切都在函数签名中。我们可以从

int->int并获得一个List->List函数 ... 或从int->int到Option->Option ... 或从字符串->浮点到字符串[]->浮点[] 看看这个页面,它有最好的解释与图形表示的想法解除

该网站是一个很好的材料宝库,有助于理解F和函数编程

简单地说,lifting的概念指的是获取一个可用于简单类型的函数f,并创建一个可用于泛型类型的新版本liftedF。我们如何做到这一点?我们将函数f传递给另一个函数,它返回一个新的改进版本的f。例如,假设您有一个返回整数平方的简单函数:

let square x = x * x    // val square : int -> int
简单对吧?传递一个int,它返回另一个int

现在,让我们创建一个新版本,如下所示:

let squareArray xA = Array.map square xA  // val squareArray : int [] -> int []
哇!squareArray可以对整个整数数组进行平方运算,创建起来非常简单!我所需要做的就是将square传递给Array.map

看看签名,正方形是int->int,正方形数组是int[]->int[]。那是提升

如果您查看Array.map的签名,它是'a->'b->'a[]->'b[] 这可以解释为接收从“a”类型到“b”类型的函数和“a”数组并返回“b”数组。但也可以将其解释为从“a”接收函数到“b”,并将提升函数从“a[]返回到“b[]:

“a->”b->“a[]->”b[]与 “a->”b->“a[]->”b[] 可以将函数提升到任何泛型类型。 什么是泛型?它是一种以另一种类型作为参数的类型,您可能已经知道许多泛型类型:

列表:选项,选项,选项。。。 结果:结果,结果。。。 您可以将函数提升到其他通用类型:

let squareOption xO = Option.map square xO  // val squareOption : int option -> int option
let stringArray  sL = Array.map  string sL  // val stringArray : int [] -> string []
这一切都在函数签名中。我们可以从

int->int并获得一个List->List函数 ... 或从int->int到Option->Option ... 或从字符串->浮点到字符串[]->浮点[]