首页 > 解决方案 > Haskell 模式匹配(初级)

问题描述

我必须在 Haskell 中实现一个小程序,根据控制台行中的内容增加/减少结果。例如,如果我们在控制台中有 -a,则结果必须为 0,如果 -b,则结果必须增加 6,依此类推。我必须通过模式匹配来做到这一点。

直到现在我还没有使用过 Haskell,我发现它很难理解。我有这个开始:

import System.Environment
main = getArgs >>= print . (foldr apply 0) . reverse
apply :: String -> Integer -> Integer

我不明白主要是什么。它做了什么,从头到尾反过来,它做了什么?正如我在互联网上所读到的,getArgs 函数为我提供了来自控制台行的值。但是我该如何使用它们呢?Haskell 中是否有类似 for/while 的等效函数?

另外,如果你有一些例子或者可能对我有帮助,我将非常感激。

谢谢!

标签: haskellmatchingfold

解决方案


这不是对初学者友好的代码。那里采用了几个快捷方式来保持代码非常紧凑(并且采用无点形式)。编码

main = getArgs >>= print . (foldr apply 0) . reverse

可以展开如下

main = do
  args <- getArgs
  let reversedArgs = reverse args
      result = foldr apply 0 reversedArgs
  print result

其结果如下所示。如果命令行参数是,例如args = ["A","B","C"],那么我们得到reversedArgs = ["C","B","A"],最后

result = apply "C" (apply "B" (apply "A" 0))

因为以这种方式foldr应用该功能apply

老实说,我不确定代码使用的原因reverse以及foldr您的任务。我会考虑foldl(或者,为了提高性能,foldl')。


推荐阅读