3

関数 listToNumber を次のように定義しました。

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

数値リストが 1 つだけ指定されている場合は問題なく動作します。たとえば、次のようになります。

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

ただし、次の場合はエラー メッセージが返されます。

map listToNumber permutations[1..3]

誰か説明してくれませんか?

PSエラーメッセージは次のとおりです。

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]
4

2 に答える 2

7

試すmap listToNumber (permutations [1 .. 3])

ghci では、関数または式のタイプを確認できます:t

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

im はmap関数とリストを必要とし、リストを返すことを意味しますが、map listToNumber permutations [1 .. 3]マップする 2 つの関数とリストを渡そうとします (関数の適用は左側に関連付けられるため)。

于 2013-08-30T06:40:20.853 に答える
0

別のバリアント: map listToNumber $ permutations [1..3].

于 2013-08-30T13:15:06.860 に答える