[ create a new paste ] login | about

Link: http://codepad.org/jakEOZPF    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Jan 11:
; godel numbering

(define primes (list 2 3 5 7 11 13 17 19 23 29
  31 37 41 43 47 53 59 61 67 71 73 79 83 89 97))

(define (godel str)
  (let loop ((cs (string->list str)) (ps primes) (g 1))
    (if (null? cs) g
      (loop (cdr cs) (cdr ps)
            (* g (expt (car ps) (- (char->integer
                 (char-upcase (car cs))) 64)))))))

(display (godel "praxis")) (newline)

(define (ungodel num)
  (let loop ((cs (list)) (ps primes) (g num) (cnt 64))
    (cond ((= g 1)
            (list->string (reverse (cons (integer->char cnt) cs))))
          ((zero? (modulo g (car ps)))
            (loop cs ps (/ g (car ps)) (+ cnt 1)))
          (else (loop (cons (integer->char cnt) cs) (cdr ps) g 64)))))

(display (ungodel (godel "praxis"))) (newline)


Output:
1
2
83838469305478699942290773046821079668485703984645720358854000640
PRAXIS


Create a new paste based on this one


Comments: