Haskell 如何将head(xs)作为一个参数传递给另一个函数?
所以我有这个函数Haskell 如何将head(xs)作为一个参数传递给另一个函数?,haskell,arguments,Haskell,Arguments,所以我有这个函数 intCMP :: Int -> Int -> Ordering intCMP a b | a == b =EQ | a < b = LT | otherwise = GT 我试图查找有关列表的信息,但我让Trouble将元素传递到intCMP中 这就是我想做的 intCMP head(xs) 1 但这给了我一个错误,说它有太多的争论 <interactive>:2:9: error:
intCMP :: Int -> Int -> Ordering
intCMP a b | a == b =EQ
| a < b = LT
| otherwise = GT
我试图查找有关列表的信息,但我让Trouble将元素传递到intCMP中
这就是我想做的
intCMP head(xs) 1
但这给了我一个错误,说它有太多的争论
<interactive>:2:9: error:
• Couldn't match expected type ‘Int’ with actual type ‘Integer’
• In the first argument of ‘intCMP’, namely ‘(head xs)’
In the expression: intCMP (head xs) 1
In an equation for ‘it’: it = intCMP (head xs) 1
:2:9:错误:
•无法将预期类型“Int”与实际类型“Integer”匹配
•在“intCMP”的第一个参数中,即“头xs”
在表达式中:intCMP(头xs)1
在“it”的方程式中:it=intCMP(头xs)1
必须以不同的方式设置括号
intCMP (head xs) (head $ tail xs)
因为在haskell函数中,应用程序只是空白
您的表达式被解析为
intCMP head xs head(tail xs)
,这不是您想要的。您必须以不同的方式设置括号
intCMP (head xs) (head $ tail xs)
因为在haskell函数中,应用程序只是空白
您的表达式被解析为
intCMP head xs head(tail xs)
,这不是您想要的。在Haskell中,通过键入函数名,然后键入每个参数来调用函数。参数之间用空格隔开
在其他语言中,特别是C的后代,可以通过在括号中传递参数来调用方法,但不能在Haskell中传递参数。括号并不表示函数调用,它们完全用于修改普通运算符的优先级
这就像在基本算术中,你有一个操作符优先级的正常顺序。例如,1+2*3
与1+(2*3)
相同,因此通常不编写后者。但是,如果您希望在乘法之前计算加法,请使用括号表示与范数的偏差:(1+2)*3
哈斯克尔也是这样。您需要将两个值传递给intCMP
,您可以这样做:
Prelude> intCMP (head xs) (head (tail xs))
LT
基本上,只需将括号移动一点。在Haskell中,通过键入函数名,然后键入每个参数来调用函数。参数之间用空格隔开 在其他语言中,特别是C的后代,可以通过在括号中传递参数来调用方法,但不能在Haskell中传递参数。括号并不表示函数调用,它们完全用于修改普通运算符的优先级 这就像在基本算术中,你有一个操作符优先级的正常顺序。例如,
1+2*3
与1+(2*3)
相同,因此通常不编写后者。但是,如果您希望在乘法之前计算加法,请使用括号表示与范数的偏差:(1+2)*3
哈斯克尔也是这样。您需要将两个值传递给intCMP
,您可以这样做:
Prelude> intCMP (head xs) (head (tail xs))
LT
基本上,您只需要将括号移动一点。错误不在于参数太多,而是列表元素的类型是
整数,而不是预期的Int
您有两种选择:
第一:通过允许接受所有的Ord
(可订购)类型,使您的功能更加通用(请注意,此功能在序言中作为compare
提供)
错误不是因为参数太多,而是列表元素的类型是Integer
,而不是预期的Int
您有两种选择:
第一:通过允许接受所有的Ord
(可订购)类型,使您的功能更加通用(请注意,此功能在序言中作为compare
提供)
你能分享运行你的程序的确切输出,以及源代码的统一视图吗?这就是我作为源代码所拥有的全部,只是定义的函数和列表。但是我会告诉你错误。在intCMP(head xs)1
和intCMP head(xs)1
之间有(或者应该有)区别。你能分享一下运行你的程序的确切输出和源代码的统一视图吗?这是我作为源代码所拥有的全部,只是定义的函数和列表。但是我将向您展示错误。intCMP(headxs)1
和intCMP head(xs)1
之间存在(或应该存在)差异。
intCMP (fromIntegral $ head intxs) 1