- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用中缀运算符,我对以下内容感到惊讶:
let (>~~~) = function null -> String.Empty | s -> s // compiles fine, see screenshot
match >~~~ input with .... // error: Unexpected infix operator in expression
和:
更改前缀 运算符的第一个字符(例如更改为!~~~
)可以修复它。我得到一个错误,说 infix 运算符是意外的,这很奇怪。悬停显示定义为 string -> string
。
我对这个错误并不太惊讶,F# 要求 (iirc) 前缀运算符的第一个字符本身必须是预定义的前缀运算符之一。但为什么它编译得很好,而当我使用它时,编译器会报错?
更新:当我在运算符定义中使用无效字符时,F# 编译器似乎在其他情况下知道得很好,它说 “无效运算符定义。前缀运算符定义必须使用有效的前缀运算符名称。”
最佳答案
F# 中自定义运算符的规则非常严格 - 因此即使您可以定义自定义运算符,也有很多关于它们行为方式的规则,您无法更改这些规则。特别是:
!
和~
的运算符)可以作为前缀运算符。使用 ~
还可以重载一元运算符 +
、-
、~
和 ~~
,所以如果你定义了一个名为 ~+.
的运算符,你就可以像这样使用它+。 42
。>
开头的运算符)只能用作中缀。您可以使用括号将任何运算符转换为普通函数,这就是为什么例如(+) 1 2
有效。?
符号比较特殊(用于动态调用),不能作为自定义运算符的第一个符号出现。我认为最直观的思考方式是自定义运算符的行为类似于标准 F# 运算符,但您可以在标准运算符名称后添加其他符号。
关于f# - 关于成功编译的前缀运算符的错误 : Unexpected infix operator in expression,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339322/
我在玩infixr , infixl和 infix声明。我明白了infixr和 infixl作品: -- Test expression: 40 +++ 20 +++ 50 +++ 10 * 10 -
如何将负数从中缀转换为后缀? 假设我有一个表达式 a = - b - (-c-d) 在我读到的某些地方,您可以将负数归为一类,例如 a = (-b) - (-c-d) 但在这里,如果我这样做,我会在后
我想知道是否有办法使用 2 个堆栈一次性解决中缀表达式?堆栈可以一个用于运算符,另一个用于操作数... shunt-yard算法求解的标准方法是将中缀表达式转换为后缀表达式(反向波兰)然后求解。我不想
我想知道是否有一种方法可以使用 2 个堆栈一次解决中缀表达式?堆栈可以是一个用于运算符,另一个用于操作数... shunt-yard算法求解的标准方法是将中缀表达式转换为后缀(逆向抛光),然后求解。我
我正在阅读 advanced operators swift 。 基本功能: func add(a: Unicorn, b: Unicorn) -> Unicorn { return a + b }
我在使用 toString() 方法并打印括号时遇到问题。在我的中缀表示法中。例如,现在如果我输入 12+3* 它将打印出 1 + 2 * 3。我希望它打印出 ((1+2) *3)。 另外,我希望在输
这是我尝试编写一个程序,可以将任何中缀格式的表达式转换为后缀格式。我将 -1 分配给顶部以指示堆栈为空。当push时,top增加,当pop时,top减少。但是,当我输入 a+b 时,输出只给出 ab
我正在使用 MathNet 并尝试将 2x^2 + x 解析为 epression using Infix.Print(Infix.ParseOrUndefined("2x^2 + x")); 但它返
我正在编写一个中缀计算器,它执行 5*(2+1) 等运算。我的代码中有一个我无法识别的错误。我写了一个最小的代码来展示这个问题: #include #include struct x{ d
这里我有一个使用 Stack 将 Infix 转换为 Postfix 的代码 代码编译没有错误,但我的问题是当我输入任何中缀时,例如 A+B,我得到一个没有运算符或括号的 AB 后缀,我无法解决这个问
我昨晚问了一个关于计算机科学类(class)的问题,我必须在其中将中缀转换为后缀表示法并进行评估。我能够调试它并使其正常工作(某种程度上),但是,对于某些表达式,我仍然会得到奇怪的输出。 它适用于基本
我的任务是编写一个应用程序(不幸的是在 C 上),它读取中缀表示法(带有变量、一元和二元运算符)的表达式并将其存储在内存中,然后对其求值。此外,还应检查正确性。 例如: 3*(A+B)-(-2-78)
假设您有一个巨大的数据缓存,需要通过 4 种方式进行搜索: 完全匹配 前缀% %后缀 %中缀% 我正在使用 Trie对于前 3 种类型的搜索,但除了对大量元素的顺序处理之外,我不知道如何处理第四种类型
我读了一本书,在示例程序中使用了 infix、infixr 和 infixl。我想知道有什么区别。我猜测 infixr 从右到左执行操作,反之亦然。 最佳答案 是的,r/l 表示结合性。如果没有测试,
我遇到了流行data.table包和一件事特别引起了我的兴趣。它有一个就地赋值运算符 := 这在基础 R 中没有定义。事实上,如果你没有加载 data.table包,如果您尝试使用它(例如, a :=
我正在阅读A Gentle Introduction to Haskell (这不是那么温和)并且它重复使用 : 运算符,而没有直接解释它的作用。 那么,它到底有什么作用呢? 最佳答案 : 是“前置”
这个问题已经有答案了: Handling parenthesis while converting infix expressions to postfix expressions (2 个回答) 已
我想包含连字符的单词,例如:长期、自尊等等,作为 Spacy 中的单个标记。在 StackOverflow 上查看了一些类似的帖子后,Github ,其 documentation和 elsewher
我想使用 ** 重载指数函数。如果我使用类似“^”的东西,我会工作,但 python 的做法是 ** 我想将它与 Swift 一起使用。有什么办法吗? error: Operator implemen
尝试使用中缀运算符,我对以下内容感到惊讶: let (>~~~) = function null -> String.Empty | s -> s // compiles fine, see scr
我是一名优秀的程序员,十分优秀!