我一直在学习 Haskell 中的
<$>
和 <*>
运算符有多么强大,以及如何在通常需要的地方定义一些不带参数的函数。我按照以下步骤更改我的 doThing
函数并逐渐删除其三个参数:
1) doThing x y z = (x + y) * z
2) doThing x y = ((x + y) *)
3) doThing x = (*) <$> (x +)
4) doThing = ((*) <$>) <$> (+)
所有这些函数都采用三个数字
x
、y
和 z
,并计算 (x + y) * z
。我知道从实际意义上来说,这既不漂亮,也不是一个好的编程实践,但我仍然想知道是否有可能将带有 N 个变量的any数学表达式描述为一个函数,而无需显式命名这 N 个变量。我尝试过更复杂的表达方式,但没有取得多大成功;即使是上面的第四步我也很难理解。
是的,总是有可能的;可以简化为的一组相当标准的组合器是 SKI 演算。参见例如此链接有关算法的一些讨论。