Luk*_*keN 11 haskell functional-programming flowchart
流程图绘制.这种古老的旧习惯已经使用了1000多年,被强加给我们贫穷的学生,没有任何用处(或者我认为是这样).它可能适用于命令式,顺序运行的语言,但我心爱的函数式编程呢?
可悲的是,我被迫为我的程序创建一个流程图(用Haskell编写).
我想这很容易:
main :: IO ()
main = do
someInput <- getLine
let upped = map toUpper someInput
putStrLn upped
Run Code Online (Sandbox Code Playgroud)
这只是3个有序的步骤,获取数据,高位输出,输出它.
这次事情变得更糟:
main :: IO ()
main = do
someInput <- fmap toUpper getLine
putStrLn someInput
Run Code Online (Sandbox Code Playgroud)
或者像这样:
main :: IO ()
main = interact (map toUpper)
Run Code Online (Sandbox Code Playgroud)
好的,那就是IO,你可以像命令式语言那样处理它.纯函数怎么样?
一个实际的例子:
onlyMatching :: String -> [FilePath] -> [FilePath]
onlyMatching ext = filter f
where f name = lower ('.' : ext) == (lower . takeExtension $ name)
lower = map toLower
Run Code Online (Sandbox Code Playgroud)
你将如何描绘最后一个?
ken*_*ytm 12
我不认为代表进程(因此改变状态)的流程图适用于FP,它主要是无状态的.
但我认为你可以展示一个电路图(?).
ext
_ | ______________________________________________
| | |
| `-> [ '.' : ] -------> [ lower ] --.__ |
| __ [ == ] ----->
name --> [ takeExtension ] ---> [ lower ] --' |
|__________________________________________________|
f
Run Code Online (Sandbox Code Playgroud)
你最好咨询教练.