获取映射的最小值

时间:2012-01-05 08:13:01

标签: haskell

我希望从两个映射中获取最小值,并从另一个映射中减去一个。我是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

我遇到了很多错误,我觉得我必须完全以错误的方式做错?

1 个答案:

答案 0 :(得分:3)

第一个问题是map2只是放弃了它给出的功能。 map1只是标准map函数,因此您无需定义它。 map2可以正确定义为:

map2 = map square

第二个问题是,您未在map1的定义中提供map2calc任何参数。这是你想要的东西吗?

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的类型是什么,以便在纠正它时开始。