2

私は正常に動作する関数を持っています:

      z::Int->Int->[Char]
      z x y =show(x)++show(y)++show(x*y)

これは実際には、いくつかの数値を文字列に変換する単なる関数です。次に、クイック ソート機能を使用して文字列をクイックソートします。

quicksort.z 2 3

しかし、ここでエラーが発生します

Couldn't match expected type `a0 -> [a1]' with actual type `[Char]'
In the return type of a call of `z'
In the second argument of `(.)', namely `z 2 3'
In the expression: flagskib . z 2 3

括弧や $ 関数の使用などの修正を試みましたが、助けにはなりませんでした。

私はそれに感謝します。問題はすでに修正されているため、この投稿の全体的な意味は学習することです.

4

2 に答える 2

9

quicksort1つの引数を取ります。z2つかかります。合成作用素の種類は次のとおりです。

(.) :: (b -> c) -> (a -> b) -> a -> c

おそらくあなたは今問題を見ることができます。タイプが一致しません。

quicksort $ z 2 3

動作します。引数へのの適用は、 (部分適用)のタイプに一致する1つの引数の関数を返すため、quicksort . z 2 $ 3または同様になります。(quicksort . z 2) 3z2(.)

于 2012-04-22T19:23:29.317 に答える
6

quicksortタイプがあると思い[a] -> [a]ます。 (.)は関数の合成に使用されるため、2つの関数が合成されることを想定していますが、[Char]代わりに使用します。あなたが書いたものはと同等ですが\x -> quicksort ((z 2 3) x)、明らかに機能しません。($)代わりに、右結合関数アプリケーションを使用する必要があります: quicksort $ z 2 3、と同等quicksort (z 2 3)

于 2012-04-22T19:26:46.607 に答える