パスカルの三角形とシェルピンスキーのギャスケット

パスカルの3角形は次のコードで生成できる。

pascal = iterate next [1]
    where next xs = zipWith (+) (0:xs) (xs++[0])

showPascal n = mapM_ print.take n$pascal
*Main> showPascal 10

とすれば、次のようなパスカルの三角形が得られる。

[1]
[1,1]
[1,2,1]
[1,3,3,1]
[1,4,6,4,1]
[1,5,10,10,5,1]
[1,6,15,20,15,6,1]
[1,7,21,35,35,21,7,1]
[1,8,28,56,70,56,28,8,1]
[1,9,36,84,126,126,84,36,9,1]

まぁ、ここまでは普通(これから後かも普通かもしれないが…)。
ここで、この三角形を Mod 2 してみると、あの有名なシェルピンスキーのギャスケットが現れる。
コードは下のようなもの。

pascalMod n = iterate next [1]
    where next xs = zipWith addMod (0:xs) (xs++[0])
          addMod x y = (x+y) `mod` n

showSierpinski n = mapM_ print.map (map toSign).take n$pascalMod 2
    where toSign x | x == 0 = '_'
                   | otherwise = '*'
*Main> showSierpinski 48

とすると、

"*"
"**"
"*_*"
"****"
"*___*"
"**__**"
"*_*_*_*"
"********"
"*_______*"
"**______**"
"*_*_____*_*"
"****____****"
"*___*___*___*"
"**__**__**__**"
"*_*_*_*_*_*_*_*"
"****************"
"*_______________*"
"**______________**"
"*_*_____________*_*"
"****____________****"
"*___*___________*___*"
"**__**__________**__**"
"*_*_*_*_________*_*_*_*"
"********________********"
"*_______*_______*_______*"
"**______**______**______**"
"*_*_____*_*_____*_*_____*_*"
"****____****____****____****"
"*___*___*___*___*___*___*___*"
"**__**__**__**__**__**__**__**"
"*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*"
"********************************"
"*_______________________________*"
"**______________________________**"
"*_*_____________________________*_*"
"****____________________________****"
"*___*___________________________*___*"
"**__**__________________________**__**"
"*_*_*_*_________________________*_*_*_*"
"********________________________********"
"*_______*_______________________*_______*"
"**______**______________________**______**"
"*_*_____*_*_____________________*_*_____*_*"
"****____****____________________****____****"
"*___*___*___*___________________*___*___*___*"
"**__**__**__**__________________**__**__**__**"
"*_*_*_*_*_*_*_*_________________*_*_*_*_*_*_*_*"
"****************________________****************"

実はMod 2でなくても、Mod 3などでも良い。が、Mod 2が見た目がいい気がする。