join

要素と要素の間ごとに新しい要素を挟み込む。

join s []     = []
join s (c:cs) = c:s:(join s cs)

実行結果。

*Main> join '-' "abc"
"a-b-c-"

あれ?

そうか,一番最後の要素も c:cs にマッチングしてるんだな。てことは”最後の要素”を表すパターンがあればいいのか。これでどうだ。

join s []     = []
join s (c:[]) = c:[]
join s (c:cs) = c:s:(join s cs)

実行。

*Main> join '-' "abc"
"a-b-c"

OK。

「join」への2件のフィードバック

  1. 私も昔昔、同じことをやったのを思いだしました。

    標準のList(またはData.List)モジュールに
    intersperse :: a -> [a] -> [a]
    intersperse sep [] = []
    intersperse sep [x] = [x]
    intersperse sep (x:xs) = x : sep : intersperse sep xs
    というのがあったりします。

  2. ほんとだ。Data.List にありますね。href Data.List で一覧を見たんですけど intersperse がどんな関数なんだか想像つきませんでした。英語力の問題か。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください