我一直在用python做这个。我发现用遗传性纯函数式风格编写的语言不是针对此语言设计的,这很麻烦。例如,对比in_order的两个定义:
def in_order(xs):
for i in range(1,len(xs)):
if xs[i] > xs[i+1]:
return False
return True
inOrder :: (Ord a) => [a] -> Bool
inOrder xs = and $ zipWith (<=) xs (tail xs)
in_order
用python 写Haskell方式既冗长(因为python不能很好地支持必要的惯用语),又很慢(由于懒惰,线性空间代替了Haskell的恒定空间)。
但是,我已经成功创建了具有功能组织的 python程序,并且每个功能都有惯用的实现。认为这是一种很好的编程方式的想法实际上是我的代码目录项目的主题。因此,我的组件面向的是在其上操作的抽象和函数(具有纯接口),而不是带有状态的类,并且它们组合得很好。实际上,用这种方式组织的代码似乎比使用类组织的代码更灵活地重用。但是,这可能是个人偏见,因为我仍然是Haskell的奉献者。
因此,我想说您的问题的答案有点。用您的功能根源来帮助您思考,但不要过度使用。例如。仅仅为了成语而在Ruby中模拟懒惰列表可能会比它值得的麻烦更多。