haskell - (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 中,if
从句是表达式。这意味着它们需要始终评估为一个值,并且还需要有一个明确的类型。更具体地说,if
没有 an 的子句else
是语法错误。此外,then
和else
案例需要具有相同的类型。
在您的情况下,如果条件适用,您可以让一个函数创建一个元组列表,但是为了使该函数具有良好的类型,该函数无论如何都需要返回一个元组列表。为什么要返回元组列表我不确定,因为您编写它的方式在这种情况下始终是单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
推荐阅读
- angular - 视口不显示从 ts 构造函数接收到的数据
- serilog - 如何使用 Serilog outputTemplate 获得格式良好的文件日志(SourceContext 的固定宽度和截断)
- r - R - 数据框非空元素的汇总统计
- alexa-skill - 避免 Alexa Skill 中的话语冲突的最佳做法是什么
- c# - 将 byte[] 转换为图像 C#(ArgumentException 错误)
- r - Shinymanager 通过单击按钮注销
- java - 我不能在弹性搜索中放置一个等于 null 的地理点
- elixir - Elixir:在条件中绑定多个变量
- node.js - 为什么 REQ.BODY 总是空的?
- android - okhttp: IllegalArgumentException: Unexpected char 0xea