2012-01-05 45 views
1

我想從兩個映射中獲取最小值,並從另一個映射中減去一個。我對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

[LYAH](http://learnyouahaskell.com/)強烈建議初學者。 – 2012-01-05 15:52:41

回答

3

第一個問題是map2只是放棄了它給出的功能。 map1只是標準的map函數,所以你不需要定義它。 map2可以正常被定義爲:

map2 = map square 

第二個問題是,你有沒有在你的calc定義的任何參數提供map1map2。像這樣的東西你想要什麼?

calc :: (a -> b) -> [a] -> Float 
calc f xs = a - b 
    where 
    a = minimum (map f xs) 
    b = minimum (map2 xs) 

基本上,你的問題是,你聲明參數但不處理他們,或者使用帶參數,而無需實際指定它們的功能。這不適用於任何語言:)

然而,這並不是全部。您的類型爲calc是錯誤的。我建議你想想爲什麼這不能工作 - 特別是,如果我說aStringb()?您可以嘗試刪除calc的類型簽名,並輸入:t calc到GHCi中,以查明什麼類型的GHC推斷calc是要得到一個開始糾正它。

+0

謝謝!感覺很蠢,但我想我們都必須從某處開始! – user1131532 2012-01-05 08:38:40