rosetta-carpet.scm 573 B

1234567891011121314151617181920212223
  1. ;(define (b-or x y) (if x #t y))
  2. ;(define (b-and x y) (if x y #f))
  3. (define (zero? x) (= x 0))
  4. (define (in-carpet? x y)
  5. (if (or (zero? x) (zero? y))
  6. #t
  7. (if (and (= 1 (modulo x 3)) (= 1 (modulo y 3)))
  8. #f
  9. (in-carpet? (quotient x 3) (quotient y 3)))))
  10. (define (carpet n)
  11. (let loop-1 ((i 0))
  12. (let loop-2 ((j 0))
  13. (display (if (in-carpet? i j)
  14. "*"
  15. " "))
  16. (if (< j (* (* n n) n)) (loop-2 (+ j 1)) #t))
  17. (newline)
  18. (if (< i (* (* n n) n)) (loop-1 (+ i 1)) #t)))
  19. (carpet 3)