Zum Inhalt
ue11
Aus ProgrammingWiki
<
BuK
<
IIm11
<
Studenten
<
simawiel
Kreativaufgabe (Gödelisierung und
\mu
-rekursive Funktionen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Hilfsfunktionen ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define pow (lambda (number exp) (if (= exp 0) 1 (* number (pow number (- exp 1)))))) (define get-elem (lambda (set index) (if (= index 1) (car set) (get-elem (cdr set) (- index 1))))) ;Berechnet die Anzahl der Wörter mit Länge <= letterCount (define word-number (lambda (cardinal-number letter-count) (if (= letter-count 0) 0 (+ (pow cardinal-number letter-count) (word-number cardinal-number (- letter-count 1)))))) (define create-word (lambda (alphabet word-number cardinal-number word-length) (if (= 0 word-length) "" (let ((section-size (pow cardinal-number (- word-length 1)))) (let ((rest (modulo word-number section-size)) (result (quotient word-number section-size))) (if (= 0 rest) (string-append (string (get-elem alphabet result)) (create-word alphabet section-size cardinal-number (- word-length 1))) (string-append (string (get-elem alphabet (+ result 1))) (create-word alphabet rest cardinal-number (- word-length 1))))))))) (define index-of (lambda (word alphabet) (if (equal? word (car alphabet)) 1 (+ 1 (index-of word (cdr alphabet)))))) (define fill-with-indexes (lambda (word-as-list list-to-fill alphabet) (if (null? word-as-list) list-to-fill (let* ((index (index-of (car word-as-list) alphabet)) (temp-list (append list-to-fill (list index)))) (fill-with-indexes (cdr word-as-list) temp-list alphabet))))) (define goedel-product-sum (lambda (indexes zero-based-length) (cond ((= 0 zero-based-length) 1) (else (+ (* (car indexes) (expt 3 zero-based-length)) (goedel-product-sum (cdr indexes) (- zero-based-length 1)))))))
(define S (list #\a #\b)) (define goedel (lambda (word alphabet) (let ( (indexes (fill-with-indexes (string->list word) '() alphabet)) ) (goedel-product-sum indexes (- (length indexes) 1)))))
(display "Rufe Gödel-Funktion auf:") (display "(goedel 'aba' S)\n") (goedel "aba" S)
ausführen
(define word-of-power-set? (lambda (goedel-number-for-word index word-length alphabet) (cond ((> index (expt (length alphabet) word-length)) (word-of-power-set? goedel-number-for-word 1 (+ word-length 1) alphabet)) ((= (goedel (create-word alphabet index (length alphabet) word-length) alphabet) goedel-number-for-word) #t) ((> (goedel (create-word alphabet index (length alphabet) word-length) alphabet) goedel-number-for-word) #f) (else (word-of-power-set? goedel-number-for-word (+ index 1) word-length alphabet))))) (define goedel-number? (lambda (number alphabet) (word-of-power-set? number 1 1 alphabet)))
(goedel-number? (goedel "abbbbbbaaabab" S) S)
ausführen
(goedel-number? 15 S)
ausführen
Das Prädikat p
(define p (lambda (r y) (if (and (<= r y) (goedel-number? y S)) 1 0)))
(p 12 15)
ausführen
(p 16 16)
ausführen
Seite
Quelltext
Versionen/Autoren
Konto registrieren
Anmelden
Navigation
Startseite
Letzte Änderungen
Alle Seiten
Einführungskurs
Hilfe
Dateien
Suche
Suchen
Werkzeuge
Links auf diese Seite
Spezialseiten