2013-08-30 2 views
3

Я определил функцию listToNumber, как показано ниже:Haskell - функция отображения для перестановки

listToNumber = foldl1 (\acc xs -> acc*10 + xs) 

Он отлично работает, когда поставляется только с одним числовым списком, например:

listToNumber [1,2,3,4] = 1234 
map listToNumber [[1,2,3,4], [5,4,3,2]] = [1234,5432] 

Однако, следующие возвращается сообщение об ошибке:

map listToNumber permutations[1..3] 

может кто-нибудь объяснить пожалуйста?

P.S. ГЗС ошибка, как показано ниже:

Couldn't match expected type `[t1] -> t0' with actual type `[b0]' 
The function `map' is applied to three arguments, 
but its type `([b0] -> b0) -> [[b0]] -> [b0]' has only two 
In the expression: map listToNumber permutations [1 .. 3] 
In an equation for `it': 
    it = map listToNumber permutations [1 .. 3] 

ответ

7

попробовать map listToNumber (permutations [1 .. 3])

в GHCI вы можете проверить тип функции или выражение с :t

> :t map 
> map :: (a -> b) -> [a] -> [b] 

им означает, что map требует функции и list и возвращает список, но в map listToNumber permutations [1 .. 3] вы пытаетесь передать две функции и список для отображения (так как приложение-приложение ассоциируется слева).

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