流程图。这种古老的做法已经使用了1000多年,被强加给我们这些穷学生,没有任何用处(或者我认为如此)。它可能适用于命令式、顺序运行的语言,但我心爱的函数式编程呢?
可悲的是,我不得不为我的程序创建一个流程图(用 Haskell 编写)。
我想这样的事情很容易:
main :: IO ()
main = do
someInput <- getLine
let upped = map toUpper someInput
putStrLn upped
这只是 3 个顺序步骤,获取数据、大写数据、输出数据。
这次情况看起来更糟:
main :: IO ()
main = do
someInput <- fmap toUpper getLine
putStrLn someInput
或者像这样:
main :: IO ()
main = interact (map toUpper)
好的,那是 IO,你可以像命令式语言一样处理它。纯函数呢?
一个实际的例子:
onlyMatching :: String -> [FilePath] -> [FilePath]
onlyMatching ext = filter f
where f name = lower ('.' : ext) == (lower . takeExtension $ name)
lower = map toLower
你会如何流程图最后一个?