let tolerance = 0.00000001
let (~=) x1 x2 = abs(x1 - x2) < tolerance
这会引发错误: “无效的运算符定义。前缀运算符定义必须使用有效的前缀运算符名称”
这甚至不是前缀运算符,我不明白它为什么这么认为。
但是以下情况很好:
let (=~) x1 x2 = abs(x1 - x2) < tolerance
我只是改变了顺序,所以“=”出现在“〜”之前。
网上是否有任何文件说明了这方面的规定?
我正在使用带有“F#2013”的Visual Studio 2013。交互式控制台显示“F#Interactive version 12.0.21005.1”
答案 0 :(得分:3)
您无法在F#中以~
开头定义中缀运算符。
F# 3.0 specification, section Categorization of Symbolic Operators非常清楚地解释了原因:
运营商
+
,-
,+.
,-.
,%
,%%
,&
,{{1可以用作前缀和中缀运算符。当这些运算符用作前缀运算符时,波形符号字符会在内部添加以生成运算符名称,以便解析器可以将此类用法与运算符的中缀使用区分开来。例如,&&
被解析为运算符-x
的应用程序到标识符~-
。此生成的名称也用于这些前缀运算符的定义。因此,以下前缀运算符的定义包括x
字符。
答案 1 :(得分:2)
在F#中,第一个位置的~
字符表示前缀运算符。例如,(~-)
是前缀“对立”运算符:(~-) 3
相当于- 3
。