0

私はこのエンコード機能を持っています:

class Encode a where
  encode :: a -> [Bit]

また、タイプ a のリストをビットのリストにエンコードする関数の作成に問題があります。リストの要素を再帰的にエンコードしたい。私の理解では、その目的のためにマップ機能を使用できます。問題は、encode がリスト [Bit] を返すのに対し、map は Bit だけを期待することです。どうすればこれを解決できますか? これがプログラムの関連部分です。

instance Encode a => Encode [a] where
    encode [] = [I, O, O, I, O, I]
    encode m = ([I, O, O] ++ (map encode m) ++ [I, O, I])
4

1 に答える 1

6

を使用しconcatMapます。concatping を実行した後、結果を生成しますmap

instance Encode a => Encode [a] where
    encode [] = [I, O, O, I, O, I]
    encode m = ([I, O, O] ++ (concatMap encode m) ++ [I, O, I])

これをどのように自分で見つけたのか: Hoogle(a -> [Bit]) -> [a] -> [Bit]を使用して、必要な関数の型を検索すると、が最初の結果です。concatMap

于 2013-05-09T18:08:26.647 に答える