それ自体に count 回追加されたリストを返す Haskell 関数を作成したいと思います ( lst * count
Python のように)。
私の最初の試みは:
self_append_n :: Int -> [a] -> [a]
self_append_n = concat . replicate
私の推論はreplicate
、カウントと値を受け入れ、値のリストを生成するというものです。値自体がリストの場合は、リストを連結するだけです。ただし、これにより当惑するエラーが発生します。
Couldn't match type `[a0]' with `[a] -> [a]'
Expected type: [[a0]] -> [a] -> [a]
Actual type: [[a0]] -> [a0]
In the first argument of `(.)', namely `concat'
In the expression: concat . replicate
In an equation for `self_append_n':
self_append_n = concat . replicate
それから私は意味のあるバージョンを書きました:
self_append_n a b = concat $ replicate a b
そしてそれは動作します!
ポイントのないバージョンがコンパイルに失敗するのに、ポイントを追加すると機能するのはなぜですか?