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/

相关文章:

r - 是否可以在没有 %% 的情况下定义运算符?

javascript - 如何在纯 JavaScript 中覆盖原生 JS 函数(canvas 的 drawImage() )?

ubuntu - Linux 下的 MbUnit,在 F# 项目中使用?

python - 在 Python 中使用带有多个参数的 __add__ 运算符

f# - 你能向我解释一下 OCaml 仿函数吗?

multithreading - F# 同时在多个线程中更新列表

c++ - 是否可以同时在两个对象上使用插入运算符?

python - 压缩和应用函数列表和相应参数时出现类型错误

c - 将字符数组作为函数参数传递

javascript - AngularJS - 将变量传递给函数返回预处理语法