【发布时间】:2015-10-28 13:04:52
【问题描述】:
在 Haskell 中我会写:
main = do mapM_ print . map (\x -> x^2) . filter (\x -> (mod x 2) == 0) $ [1..20]
在 Python 中,我将不得不使用许多括号或无用的变量...在 Python 中是否有类似 . 和 $ 的东西?
【问题讨论】:
-
对于我们这些不熟悉 Haskell 的人,您能否描述一下该操作的作用,可能带有输入/输出示例?
-
@CoryKramer,
.允许函数部分应用,map和filter接收(就像在 Python 中一样)一个函数和一个列表,所以map(function).filter(function2, list)意味着map应用function在将function2应用于list的元素之后,返回filter的每个元素。这是因为 haskell 默认是惰性的 -
在 Haskell 中
.是函数组合,大致上f . g大致代表Pythonlambda x: f(g(x))。相反$是应用程序f $ x只是f(x),但允许避免括号,例如f $ x+y+z意思是f(x+y+z)。 -
尽管如此,即使有办法欺骗 Python 来模拟 Haskell 的这些句法元素,我也不确定使用它们是否是个好主意。我会尝试在 Haskell 中使用惯用的 Haskell 代码,在 Python 中使用惯用的 Python 代码。
-
那边的
do是多余的。
标签: python haskell functional-programming combinators