2012-01-05 6 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/) рекомендуется для начинающих. –

ответ

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 неверен. Я предлагаю вам подумать о почему это не может работать - в частности, то, что, если я скажу является String и б является ()? Попробуйте удалить сигнатуру типа calc и ввести :t calc в GHCi, чтобы узнать, что тип GHC для calc - это попытка начать исправление.

+0

спасибо! чувствуя себя довольно глупым, но я думаю, мы все должны что-то начать! – user1131532

Смежные вопросы