首页 > 解决方案 > (haskell 的新手)如果语句生成解析错误

问题描述

如果条件适用,我希望该函数创建一个元组列表,但它似乎不起作用。(我是haskell的新手)


exist'z s = [ y | y <- s, toLower (y) =='z' ]
freq'z s =  if (exsit'z s /= "") then [( 'z', length (exist'z s ))]

标签: haskell

解决方案


在 Haskell 中,if从句是表达式。这意味着它们需要始终评估为一个值,并且还需要有一个明确的类型。更具体地说,if没有 an 的子句else是语法错误。此外,thenelse案例需要具有相同的类型。

在您的情况下,如果条件适用,您可以让一个函数创建一个元组列表,但是为了使该函数具有良好的类型,该函数无论如何都需要返回一个元组列表。为什么要返回元组列表我不确定,因为您编写它的方式在这种情况下始终是单then例。您可以附加else []并使其工作,但也许更合适的类型是Maybe

exist'z :: String -> String
exist'z s = [ y | y <- s, toLower y =='z' ]

freq'z :: String -> Maybe (Char, Int)
freq'z s =  if (exist'z s /= "") then Just ( 'z', length (exist'z s )) else Nothing

推荐阅读