我希望从两个映射中获取最小值,并从另一个映射中减去一个。我是Haskell的新手,我的尝试让我很尴尬,但我想在问之前先试试吧!
calc :: (a -> b) -> [a] -> Float
calc = a - b
where
a = minimum map1
b = minimum map2
map1 f xs = [f x | x <- xs]
map2 f xs = [square x | x <- xs]
square x = x*x
我遇到了很多错误,我觉得我必须完全以错误的方式做错?
答案 0 :(得分:3)
第一个问题是map2
只是放弃了它给出的功能。 map1
只是标准map
函数,因此您无需定义它。 map2
可以正确定义为:
map2 = map square
第二个问题是,您未在map1
的定义中提供map2
和calc
任何参数。这是你想要的东西吗?
calc :: (a -> b) -> [a] -> Float
calc f xs = a - b
where
a = minimum (map f xs)
b = minimum (map2 xs)
基本上,您的问题是您声明参数但不处理它们,或使用带参数的函数而不实际指定它们。这不适用于任何语言:)
然而,并非如此。您calc
的类型错误。我建议您考虑为什么这不起作用 - 特别是,如果我说 a 是String
而 b 是()
?您可以尝试删除calc
的类型签名并将:t calc
输入GHCi,以了解GHC推断calc
的类型是什么,以便在纠正它时开始。