gpt4 book ai didi

ocaml - 在 OCaml 中放置括号的一般规则是什么?

转载 作者:行者123 更新时间:2023-12-02 08:35:50 25 4
gpt4 key购买 nike

我总是很难在 OCaml 中放置括号。好吧,我总是不想,但有时会出错。


例如,假设我有两个函数:

让 f_a x y = x+y让 f_b x = x+1

如果我执行 f_a 3 f_b 4,我不能,我应该执行 f_a 3 (f_b 4)

但如果我这样做 f_a 3 * f_b 4,那就完全没问题了。


另一个例子,如果我做 f_a x y::[] 也可以,我不需要像这样添加括号 (f_a x y)::[]

我还发现元组中的元素不需要括号: (f_a 1 2, f_b 3) 很好。


那么任何人都可以教我决定何时使用括号和何时不使用括号的一般规则吗?

最佳答案

Here's一张解释 OCaml 中某些表达式的优先级和关联性的表格。

从那里可以看出,函数应用程序是左关联的,这意味着 f_a 3 f_b 4 被解释为 (((f_a) 3) f_b) 4 .但是,乘法 (*) 的优先级低于函数应用,这意味着 f_a 3 * f_b 4 被解释为 (f_a 3) * (f_b 4) (首先应用函数,然后是乘法)。

最后,:: 的优先级低于函数应用,所以 f_a x y::[] 先应用函数,然后连接到空列表(即“消耗”::[])。这意味着 f_a x y::[] 被视为 (f_a x y)::[]

很遗憾,我无法推导出一个简单的经验法则,但我始终记得“函数应用程序具有很高的优先级并且是左关联的”。这对我来说效果很好。

关于ocaml - 在 OCaml 中放置括号的一般规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com