Tim*_*son 17 f# function operator-keyword
F#允许您通过以下方式将运算符转换为函数( ):例如,(+)类型int -> int -> int.
是否可以使用list cons运算符执行此操作::?
它的行为不像普通的二元运算符:
FSI> (::);;
(::);;
-^^
c:\temp\stdin(3,2): error FS0010: Unexpected symbol '::' in expression.
Expected ')' or other token.
Run Code Online (Sandbox Code Playgroud)
并且该List.Cons方法需要一个元组; 它并非咖喱.
(能够做到这一点很有用.例如,你可以用它来实现折叠方面的地图).
Bri*_*ian 16
从http://cs.hubfs.net/forums/permalink/11713/11713/ShowThread.aspx#11713转述
(::)是一个有区别的联合'构造函数' list<'a> type,因此提出了一个问题,即作为一个函数值,它的参数是应该被curry(像+)还是tupled(就像所有的DU构造函数一样).对于某些人来说,无论哪种方式都看似腥/出乎意料,因此F#根本不允许构造.
当然你总能写出例如
let cons x y = x :: y
Run Code Online (Sandbox Code Playgroud)
并使用cons,或者只使用lambda fun x y -> x::y,如果你想要一个"两个args的curried前缀函数".
::和都可以分别用和来[]表示。请记住,前者将元组作为参数。这些列表位于此处,以便可以使用 F# 以外的语言创建列表。List<_>.ConsList<_>.Empty
> List.Cons(4, List.Empty);;
val it : int list = [4]
> 4::[];;
val it : int list = [4]
> List<int>.Cons(4, List<int>.Empty);;
val it : int list = [4]
> List.Cons;;
val it : 'a * 'a list -> 'a list = <fun:clo@24-7> //'
> List<int>.Empty;;
val it : int list = []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |