所以我不断听到很多关于无点编程的信息,我决定做一个小实验来测试我对它的掌握程度。这涉及采用一个带尖的函数来计算一个数字的阶乘并将其转换为无点形式。我设法做到了,但是无点结果的可读性远低于有针对性的结果。
-- pointed
fact 0 = 1
fact n = n * (fact (n-1))
-- point free
fact' = foldr1 (*) . takeWhile ((<) 0) . iterate (flip (-) 1)
我是否遗漏了点自由符号所必需的东西,或者这是否像某些转换一样可读?对我来说,函数的很大一部分似乎fact
是零上的模式匹配,事实上,模式匹配是我喜欢 Haskell 的最大原因之一。然而,无点符号似乎完全不允许这样做,以及其他一些非常有用的东西,比如列表推导。