Haskell - 映射函数到置换

时间:2013-08-30 06:32:44

标签: haskell map permutation

我将函数listToNumber定义如下:

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]

2 个答案:

答案 0 :(得分:7)

尝试map listToNumber (permutations [1 .. 3])

在ghci中,您可以使用:t

检查函数或表达式的类型
> :t map
> map :: (a -> b) -> [a] -> [b]

im表示map需要一个函数和一个列表并返回一个列表,但是在map listToNumber permutations [1 .. 3]中你尝试传递两个函数和一个列表来映射 (因为函数应用程序关联到左侧)。

答案 1 :(得分:0)

另一种变体:map listToNumber $ permutations [1..3]