我正在编写一种具有一些功能元素的自定义语言。当我卡在某个地方时,我通常会检查 Haskell 是如何做到的。不过,这一次,我想给 Haskell 举个例子,这个问题有点复杂。
事情是这样的。
假设我们有以下行
a . b
在哈斯克尔。显然,我们正在组合两个函数,a 和 b。但是如果函数 a 将另外两个函数作为参数呢?是什么阻止它在 . 和乙?您可以将它括在方括号中,但这不应该有什么不同,因为表达式仍然计算为一个函数,一个前缀一,并且前缀函数优先于中缀函数。
如果你这样做
(+) 2 3 * 5
例如,它将输出 25 而不是 17。
基本上我要问的是,当您希望中缀函数在前面的前缀函数之前运行时,Haskell 使用什么机制。
所以。如果“a”是一个以两个函数作为参数的函数。你如何阻止 Haskell 解释
a . b
作为“将 . 和 b 应用于函数 a”并将其解释为“组合函数 a 和 b”。