【发布时间】:2017-05-08 08:52:30
【问题描述】:
我很难理解如何在警卫中使用模式匹配。
我有这个示例函数,其目的是返回字符串中的最后一个字符。
myFun :: [Char] -> Char
myFun str@(f:s:rst)
| str == "" = error "0 length string"
| length str == 1 = head str
| rst == "" = s
| otherwise = lame (s:rst)
当传递一个带有单个字符的字符串时,它会因“函数中的非详尽模式”而失败。
我假设 Haskell 意识到它不能使用 (f:s:rst) 的形式来匹配单个元素列表,然后在尝试评估对 length 的调用之前失败。
当只有一个元素时,我如何制作一个可以告诉 Haskell 该怎么做的守卫?
【问题讨论】: