shithub: femtolisp

ref: 5681745bc3eff5ebcaa2986137c1df63ae920a7e
dir: /femtolisp/rule30.lsp/

View raw version
; -*- scheme -*-

(define (rule30-step b)
  (let ((L (ash b -1))
	(R (ash b 1)))
    (let ((~b (lognot b))
	  (~L (lognot L))
	  (~R (lognot R)))
      (logior (logand  L ~b ~R)
	      (logand ~L  b  R)
	      (logand ~L  b ~R)
	      (logand ~L ~b  R)))))

(define (nestlist f zero n)
  (if (<= n 0) ()
      (cons zero (nestlist f (f zero) (- n 1)))))

(define (string.rep s k)
  (cond ((< k 4)
	 (cond ((<= k 0) "")
	       ((=  k 1) (string s))
	       ((=  k 2) (string s s))
	       (else     (string s s s))))
	((odd? k) (string s (string.rep s (- k 1))))
	(else     (string.rep (string s s) (/ k 2)))))

(define (pad0 s n) (string (string.rep "0" (- n (length s))) s))

(define (bin-draw s)
  (string.map (lambda (c) (case c
			    (#\1 #\#)
			    (#\0 #\ )
			    (else c)))
	      s))

(for-each (lambda (n)
	    (begin
	      (princ (bin-draw (pad0 (number->string n 2) 63)))
	      (terpri)))
	  (nestlist rule30-step (uint64 0x0000000080000000) 32))