【发布时间】:2019-12-16 05:22:12
【问题描述】:
在 F# 中我可以定义这样的函数
let (-+->) x y = x + y
然后这样调用
let z = 5 -+-> 6
我什至可以做这样的事情
let (-++->) x y z = x y z
let p = ((fun x -> fun y -> x + y) -++-> 5 ) 6
但是为什么我不能这样做呢?
let (nafis) x y = x + y
let p = 5 nafis 6
它给了我这个错误Unexpected identifier in binding. Expected '=' or other token。
像let (-+->) x y = x + y 这样的函数有什么特殊的函数吗?
【问题讨论】:
-
我猜这是因为,就像在 OCaml 中一样,优先级和关联性由第一个符号决定,并且只为非常有限的一组符号定义。允许字母数字运算符名称似乎也很模棱两可。例如,您如何解析
a nafis b? is 是一个函数应用程序,其中nafis和b应用于a,或者a和b应用于运算符nafis? -
有讨论扩展语言以支持类似的东西:github.com/fsharp/fslang-suggestions/issues/772
标签: function functional-programming f#