Function Haskell中的函数定义
我开始学习哈斯凯尔语的时候说“学你一个好哈斯凯尔!”我犯了一个奇怪的错误,我找不到原因 以下是我键入的代码:Function Haskell中的函数定义,function,haskell,Function,Haskell,我开始学习哈斯凯尔语的时候说“学你一个好哈斯凯尔!”我犯了一个奇怪的错误,我找不到原因 以下是我键入的代码: let xs = [if x < 3 then "bang" else "boom" | x <- xs] 让xs=[如果x
let xs = [if x < 3 then "bang" else "boom" | x <- xs]
让xs=[如果x<3那么“砰”或者“砰”| x你对xs
的定义是递归的,也就是说你在自己的定义中使用了xs
。我认为这不是你想要的
由于您在列表理解中使用了“bang”
和“boom”
,Haskell知道xs
必须是字符串列表(因为xs
等于列表理解的结果)。此外,您还说x
是xs
的一个元素(x尝试为表达式指定一个类型
xs = [if x < 3 then "bang" else "boom" | x <- xs]
它是类型为String
(又称[Char]
)的表达式
因此xs::[String]
。由于描述列表元素的表达式中的x
取自列表xs
本身,因此它也是一个字符串,用于比较
if x < 3
从表达式x<3
,我们得到
- 来自文本的
Num
约束
- 类型
String
来自x
是从String
s列表中提取的事实
因此,我们需要一个Num
实例来创建一个类型良好的表达式
通常,String
没有Num
实例(有用的实例是什么?),因此会出现类型错误
如果xs
是函数的参数
boom xs = [if x < 3 then "bang" else "boom" | x <- xs]
boom xs=[如果x<3,则“bang”否则“boom”| x
表示“X”等于“砰”和/或“砰”的列表,但条件是这些元素应该进行测试,该死的,比我快几秒钟….+1感谢你们两人的答案;它们是互补的。感谢你们两人的答案;它们是互补的。
if x < 3 then "bang" else "boom"
if x < 3
3 :: Num a => a
boom xs = [if x < 3 then "bang" else "boom" | x <- xs]
let xs = ...
let boom xs =...