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/