Dar*_*zer 10 haskell non-exhaustive-patterns
我正在通过Haskell的逻辑,数学和编程之路.(我只是在第1章的中途,但到目前为止我很享受并打算继续.)我已经阅读了第1.5节"播放Haskell游戏",其中包含了许多其他示例.让你熟悉[Haskell]".到目前为止,我已经了解了函数,类型声明,保护方程,关于列表模式匹配以及where和let.
我坚持练习1.17,它要求我们写一个函数substring :: String - > String - > Bool其中:
我使用了前面例子中提供的前缀函数:
prefix :: String -> String -> Bool
prefix [] ys = True
prefix (x:xs) [] = False
prefix (x:xs) (y:ys) = (x==y) && prefix xs ys
Run Code Online (Sandbox Code Playgroud)
然后尝试:
substring :: String -> String -> Bool
subsstring xs [] = False
substring xs (y:ys) | prefix xs (y:ys) = True
| substring xs ys = True
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
......以及其他可能的排列.
当我跑步时,substring "abc" "xxxabcyyy"我得到了True,但是当我跑步时,substring "abc" "xxxabyyy"我得到"***异常:substring.hs:(3,0) - (5,45):函数子串中的非详尽模式".我无法弄清楚为什么.我不明白当我使用"否则"时可能会出现非详尽的模式.
顺便说一下,这本书还没有涵盖if-then-else.我现在更愿意将其从我的解决方案中删除.
sth*_*sth 12
你在函数名中有一个拼写错误:
subsstring xs [] = False
Run Code Online (Sandbox Code Playgroud)
由于拼写错误,这声明了一个新函数subsstring,而不是函数的情况substring.
然后substring函数本身没有任何与第二个参数匹配的情况[].
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |