29 lines
712 B
Racket
29 lines
712 B
Racket
#lang racket
|
|
|
|
(define namespaces
|
|
(for/list ([i (in-range 1 13)])
|
|
(define ns (make-base-namespace))
|
|
(eval `(begin (define N ,i) (define count 0)) ns)
|
|
ns))
|
|
|
|
(define (get-var-values name)
|
|
(map (curry namespace-variable-value name #t #f) namespaces))
|
|
|
|
(define code
|
|
'(when (> N 1)
|
|
(set! N (if (even? N) (/ N 2) (+ 1 (* N 3))))
|
|
(set! count (add1 count))))
|
|
|
|
(define (show-nums nums)
|
|
(for ([n nums]) (display (~a n #:width 4 #:align 'right)))
|
|
(newline))
|
|
|
|
(let loop ()
|
|
(define Ns (get-var-values 'N))
|
|
(show-nums Ns)
|
|
(unless (andmap (λ(n) (= n 1)) Ns)
|
|
(for ([ns namespaces]) (eval code ns))
|
|
(loop)))
|
|
(displayln (make-string (* 4 12) #\=))
|
|
(show-nums (get-var-values 'count))
|