リストのネストの深さ
例えば、Double のリストのリストのリストの…、と何重かに入れ子になったリストに対して、入れ子の深さを計算する関数は書けるのか?そういう関数があれば、引数の型はなんになるのか?確定しないからダメな気がする。
でも、多重リスト自体は実際存在するし、それぞれ型が決まってるからその深さも確定しているはず。何とか出せないもんかな。
ほんのちょっとだけやってみた記録。
-- リストの深さ1のところをほどく concat1 = concat -- リストの深さ2の所をほどく concat2 [] = [] concat2 (x:xs) = ((concat1 x) : (concat2 xs)) -- リストの深さ3の所をほどく concat3 [] = [] concat3 (x:xs) = ((concat2 x) : (concat3 xs)) -- concatN n xs -- リストの深さnの所をほどく? -- コンパイルエラー concatN _ [] = [] concatN 1 xs = concat xs concatN n (x:xs) = ((concatN n-1 x) : (concatN n xs))