"1"コの"1"です。次の項は「11」になります(笑)。"2"コの"1"です。よって次の項は「21」になります。「しね」って感じですよね(笑)。この要領で生成していくんですね。今回はこの数列を「Haskell」で生成してみようと言う話です。las)これだけです!Haskellはやっぱすげぇ!そして、「group」関数を使いたいので、「Data.List」をインポートします。同じ要素が続いた箇所をグループにします。「"AAABBBBBCC"」であったら「["AAA","BBBBB","CC"]」と返します。「reverseRle」は引数取ってねぇじゃんって思うかも知れませんが、違います。合成関数の「.」が効いてます。a」としたら「a」が引数なんですが、まずは「group」関数を適用して、次に「.」以前を適用します。その結果をラングレス圧縮します。「reverse」します。ラングレス圧縮っていうのが、以下のコードで書けます。group入力は文字列、つまり[Char]じゃないとダメです。返り値も[Char]を返します。"AAABBBBBCC"」とやったら、「"A3B5C2"」って返ってきます。これが、「"3A5B2C"」になって欲しいので、「reverseRle」が必要なんですね。課題の数列が、前の項の、同じ要素が続いた箇所をグループにし、その文字の連続回数とその文字をくっつけた数字(型的には[Char])を次の項とするような数列だからです。「111」を「"111"」にして返します。「length」は「"111"」であったら「長さ」を返すのでこの場合は「3」を返します。Int」なので、いじりやすくするために、文字列にしたいので、「show」で文字列に調整します。[Char]」なんですが、返り値が「Char」になってしまうので困ります。]"でくくって[Char]にします。「s」はgroupされた["1","11","21",...]とあったら、このなかの各要素に、headとlengthしてshowした値をくっつけた値を返しています。これは「map」関数で、各要素に対して、第一引数の関数を適用していきます。「concatMap」関数ですが、これは第一引数で「map」して、結果を「concat」するものです。「"11"と"12"」が生成されて、最終的にこれらをくっつけるので、「"1112"」が返ってきます。この関数だと、例えば、「s」が「"21"」だったら、「"1211"」を返します。"1"」でくっつけているんですね。「++」は文字列同士の結合です。「:」はリストの先頭にくっつけます。["21"]」でしたら、「["11","21"]」となります。これで、reverseRle関数については分かって頂けると思います。