BuK/IIm11/Studenten/sirabien/goedelisierung
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
=Hilfsfunktionen=
<code id="4fe090ebc6161">;Returns the position of an element in a list.
(define position
(lambda (element list)
(if (null? list)
(position element list) ;(rotate #\T 180)
(if (equal? element (car list))
1
(+ 1 (position element (cdr list)))))))
;Returns the element at the position.
(define element
(lambda (position list)
(if (null? list)
(element position list) ;(rotate #\T 180)
(if (= position 1)
(car list)
(element (- position 1) (cdr list))))))
(define BASE 3)
(define S '(#\a #\b))</code>
=Gödelisierung=
<code id="4fe090ebc61d9">(define h
(lambda (w)
(let* (
(wList (string->list w))
(letterCount (length wList)))
(if (= letterCount 0)
0
(+
(* (position (car wList) S) (expt BASE (- letterCount 1)))
(h (list->string (cdr wList))))))))</code>
<run id="4fe090ebc6502">(display "Gödelnummer von abab:\n")
(h "abab")</run>
=Umkehrfunktion der Gödelisierung=
<code id="4fe090ebc6265">;Returns the word for the Gödelnumber n if n is a Gödelnumber or
;false if it's not.
(define nice-h-1
(lambda (n)
(let (
(quot (quotient n BASE))
(rest (modulo n BASE)))
(if (= rest 0)
#f
(let ((letter (string (element rest S))))
(if (= quot 0)
letter
(let ((word (nice-h-1 quot)))
(if (equal? word #f)
#f
(string-append word letter)))))))))</code>
<run id="4fe090ebc6567">(display "Wort für Gödelnummer 50:\n")
(nice-h-1 50)
(display "Ergebniss für Zahl die keine Gödelnummer ist:\n")
(nice-h-1 10)</run>
=Prädidikat=
<code id="4fe090ebc62ec">(define p
(lambda (r y)
(if (> r y)
0
(if (equal? #f (nice-h-1 y))
0
1))))</code>
=G=
<code id="4fe090ebc6390">(define g
(lambda (i)
(letrec
((fkt (if (= i 1)
(lambda (n)
(= 0 (- 1 (p 0 n))))
(lambda (n)
(= 0 (- 1 (p (+ (g (- i 1)) 1) n))))))
(worker
(lambda (n)
(if (fkt n)
n
(worker (+ n 1))))))
(worker 1))))</code>
<run id="4fe090ebc65cb">(display "Die 9. Gödelnummer ist:\n")
(g 9)</run>
<code id="4fe090ebc6402">(define goedelGen
(lambda (n)
(if (= n 0)
'()
(append (goedelGen (- n 1)) (list (g n))))))</code>
<run id="4fe090ebc662a">(display "Die ersten 9 Gödelnummern sind:\n")
(goedelGen 9)</run>
<code id="4fe090ebc646f">(define k
(lambda (n)
(nice-h-1 (g n))))</code>
<run id="4fe090ebc668c">(display "Das 9. Wort der gödelgeordneten Folge der Wörter aus S* ist:\n")
(k 9)</run>