我最近开始使用 Haskell 学习函数式编程,并在 Haskell 官方 wiki 上发现了这篇文章:如何阅读哈斯克尔 http://www.haskell.org/haskellwiki/How_to_read_Haskell#What_the_heck_is_xyz.3F.
该文章声称短变量名,例如x
, xs
, and f
由于简洁和抽象,适合 Haskell 代码。从本质上讲,它声称函数式编程是一种独特的范式,因此其他范式的命名约定不适用。
您对此有何看法?
在函数式编程范式中,人们通常不仅构建抽象top-down, 但是也自下而上 http://www.paulgraham.com/progbot.html。这意味着您基本上增强了宿主语言。在这种情况下,我认为简洁的命名是合适的。 Haskell 语言已经简洁且富有表现力,所以您应该习惯它。
然而,当尝试对某个域进行建模时,我不认为简洁的名称是好的,即使函数体很小。领域知识应该体现在命名中。
只是我的观点。
回应你的评论
我将从中获取两个代码片段现实世界哈斯克尔 http://www.realworldhaskell.org/blog/,都来自第3章 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html.
在名为“更可控的方法 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.morecontrolled”,作者提出了一个返回列表第二个元素的函数。他们的最终版本是这样的:
tidySecond :: [a] -> Maybe a
tidySecond (_:x:_) = Just x
tidySecond _ = Nothing
由于类型参数,该函数足够通用a
事实上,我们正在对内置类型进行操作,因此我们并不真正关心第二个元素实际上是什么。我相信x
在这种情况下就足够了。就像一个小数学方程一样。
另一方面,在名为“引入局部变量 http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html#deftypes.locals”,他们正在编写一个示例函数,尝试对银行领域的一小部分进行建模:
lend amount balance = let reserve = 100
newBalance = balance - amount
in if balance < reserve
then Nothing
else Just newBalance
当然不建议在这里使用短变量名。我们实际上确实关心这些金额代表什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)