我将我的解决方案与haskell.org http://www.haskell.org/haskellwiki/Euler_problems/31_to_40上发布的解决方案进行了比较, 并且不知道该怎么想.我写的是非惯用的,平均的haskell开发人员会立即将我的代码弹射到月球上吗?
main =
print $ length $ split 200
split n = split' [200, 100, 50, 20, 10, 5, 2, 1] n
where split' (1:[]) n = [take n $ repeat 1]
split' (c:cs) n
| n > c = map (c:) (split' (c:cs) (n - c)) ++ split' cs n
| n == c = [[c]] ++ split' cs n
| otherwise = split' cs n
Run Code Online (Sandbox Code Playgroud)
来自"企业"的发展我有点直接和愚蠢的解决方案,但另一方面也许每个人都可以阅读单线,我只需要拿起我的游戏?你会建议压缩代码作为练习,还是仅仅针对黑客?
作为一般规则,您可以说如果其他人有可能阅读您编写的代码,您应该精心描述代码中的每一步,即使这意味着您必须再写十行而不是快速和时髦的解决方案.
如果你只为自己编写代码,那么你可以做任何你想做的事情,但你必须记住,你很可能想要了解你在很长一段时间内在硬盘上找到的代码.
压缩它可能是一个有用的东西,学习如何使用Haskell的特殊功能和吹牛("我解决了一行!!"),但否则人们不能忽视可读性和可维护性的重要性.
较长代码的另一个优点是,如果代码的行为不符合预期,则更容易调试,因为它的格式类似于它的逻辑结构(如果格式正确),从而使跟踪错误更容易.