Files
kraken/sierpinski.kp

39 lines
1007 B
Plaintext
Raw Normal View History

(with_import "./collections.kp"
(let (
to_bpm (lambda (x) (let (
rows (len x)
cols (len (idx x 0))
file "P1"
file (str file "\n" cols " " rows)
file (foldl (lambda (a row)
(str a "\n" (foldl (lambda (a x)
(str a " " x)
) "" row))
) file x)
) file))
stack concat
side (lambda (a b) (foldl (lambda (a b c) (concat a [(concat b c) ]))
[] a b))
padding (rec-lambda recurse (r c)
(cond (and (= 1 r) (= 1 c)) [ [ 0 ] ]
(= 1 c) (let (x (recurse (/ r 2) c)) (stack x x))
true (let (x (recurse r (/ c 2))) (side x x))))
shape [ [ 1 1 ]
[ 1 1 ] ]
sierpinski (rec-lambda recurse (depth)
(if (= depth 1) shape
(let (s (recurse (/ depth 2))
p (padding depth (/ depth 2))
) (stack (side (side p s) p)
(side s s))))
)
img (to_bpm (sierpinski 64))
) (write_file "./sierpinski.pbm" img)
))