function - 使用列表 cons 运算符 (a::b) 作为函数

标签 function f# operator-keyword

F# 让您可以通过 ( 将运算符转换为函数) :例如,(+)int -> int -> int 类型.

是否可以使用列表 cons 运算符 :: 执行此操作? ?

它的行为不像普通的二元运算符:

FSI> (::);;

  (::);;
  -^^

c:\temp\stdin(3,2): error FS0010: Unexpected symbol '::' in expression.
Expected ')' or other token.

List.Cons方法接受一个元组;它不是 curry 。

(能够做到这一点很有用。例如,您可以使用它来实现 map in terms of fold )。

最佳答案

转述自 http://cs.hubfs.net/forums/permalink/11713/11713/ShowThread.aspx#11713
(::)list<'a> type 的可区分联合“构造函数” ,因此提出了一个问题,即作为函数值,它的参数是否应该被柯里化(Currying)(如 + )或元组(如所有 DU 构造函数)。对于某些人来说,无论哪种方式似乎都很可疑/出乎意料,因此 F# 只是不允许该构造。

当然你总是可以写例如

let cons x y = x :: y

并使用 cons ,或者只使用 lambda fun x y -> x::y ,如果你想要一个“两个参数的 curry 前缀函数”。

关于function - 使用列表 cons 运算符 (a::b) 作为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821472/

相关文章:

c++ - C++中的字符串类赋值运算符重载

arrays - 错误#6366 : The shapes of the array expressions do not conform

C 段错误 : memory altered between functions strcmp

F# 比较与 C# IComparable

f# - 使用 F# 的纯函数式

c++ - 我们如何在该类中使用运算符?

c# - 对于运算符重载,C# 编译器如何决定哪个实现适用于混合类型的操作数?

python - 使用字典中参数的所有组合评估函数

javascript - jQuery 如何使函数全局化?或文档级别?

azure - 如何使用 F# 将 Web 应用程序部署到 Azure 网站