1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
| primesOfSize goedel |

primesOfSize := [:n |
    | m primes  |
    m := 0.
    [(primes := Integer primesUpTo: (10 raisedTo: (m := m + 1))) size >= n] whileFalse.
    primes first: n].

goedel := [:num |
    | digits size |
    digits := (num asString as: Array) collect: [:char | char asString asInteger].
    size := digits size.
    primes := primesOfSize value: size.
    (1 to: size) inject: 1 into: [:goe :idx | goe * ((primes at: idx) raisedTo: (digits at: idx))]].

goedel value: 9.   "=> 512 "
goedel value: 81.   "=> 768 "
goedel value: 230.   "=> 108 "