1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(define (bars n)
  (define (limit i j) (<= (+ i j) (* 2 (- n 1))))
  (define (oddp n) (= (remainder n 2) 1))
  (define (append0 i j result)
    (if (limit i j)
      (cons (cons i j) result)
      result))
        
  (define (rec i j result)
    (cond ((<= i (* 2 (- n 1)))
           (if (<= j i)
             (rec i (+ j 2) (append0 i j result))
             (rec (+ i 1) (if (oddp (+ i 1)) 1 2) result)))
          (else
           result)))
  (rec 1 1 ()))

(define (draw n bars)
  (define (empty i)
    (cond ((<= i n)
           (display "| ")
           (empty (+ i 1)))
          (else
           (display "\n"))))
  (define (rec i j)
    (cond ((<= j n)
           (cond ((<= i (* 2 (- n 1)))
                  (display "|")
                  (display (if (member (cons i j) bars) "-" " "))
                  (rec i (+ j 1)))
                 (else
                  'ok)))
          (else
           (display "\n")
           (rec (+ i 1) 1))))
  (empty 1)
  (rec 1 1))

(define (amida n) (draw n (bars n)))