Church Numerale
Allgemein Scheme
Natürlich kann man alles über die Church Numerale auch in Wikipedia nachlesen
Aber ich will es trotzdem mal in meinen Worten versuchen.
Kategorie Natürlich kann man alles über die Church Numerale auch in Wikipedia nachlesen
Aber ich will es trotzdem mal in meinen Worten versuchen.
Nehmen wir mal alle natürliche Zahlen größer
0, sozusagen 0, 1, 2, 3,.... usw.
Diese Zahlen kann man ja auch definieren, durch die 0 und dass man immer eine 1 darauf addiert.
Denn:
1 = 0 + 1
2 = 1 + 1
3 = 2 + 1
4 = ......
Man erhält somit alle natürlichen Zahlen größer 0, durch die Definition eines "Startes" (0) und eines Nachfolgers ("Addition" +1).
In dem Link siehe oben, kann man nachlesen, wie man mittels des Lambda-Kalküls, die natürliche Zahlen größer 0 definieren kann.
Wie sieht nun so eine Implementierung des Lambda-Kalküls in Scheme (oder anderen Programmiersprachen) aus?
Wie wir bei den natürlichen Zahlen gesehen haben, muß die 0 definiert werden und wie man den Nachfolger erhält.
Die Definition der null ist relativ simpel, sie muß als Ergebnis die Identität liefern (mehr mathematisch neutrales Element bei den Funktionen ):
(define null (lambda (x) x))
Die Definition des Nachfolgers succ muß als Ergebnis eine Funktion liefern, welche einen "Funktionsaufruf" mehr hat:
(define (succ n) (lambda (f) (lambda (x) (f ((n f) x)))))
Wenn man die 1 nun als one, wie folgt definiert:
(define one (lambda (f) (lambda (x) (f x))))
sieht man, dass die one = (succ null) ist.
Die Frage, die man sich stellen könnte, ist welches sind die anderen Programmiersprachen?
Bei allen Programmiersprachen sollte man die "Church Numerale" implementieren können, welche Funktionen / Prozeduren / Methoden als First Class Values oder Elemente erster Klasse sind.
Dies bedeutet:
a) Funktionen können mit Variablen benannt oder Variablen zugewiesen werden
b) Sie können an Funktionen / Prozeduren / Methoden als Parameter übergeben werden
c) Sie können als Ergebnis einer Funktion / Methode geliefert werden
d) Sie können in Datenstrukturen ausgenommen werden
Diese Definition geht zurück auf Christopher Strachey, ich meine abgesehen davon, dass er aus England kommt, scheint er doch einen guten Job gemacht zu haben
Gruß JJR
Diese Zahlen kann man ja auch definieren, durch die 0 und dass man immer eine 1 darauf addiert.
Denn:
1 = 0 + 1
2 = 1 + 1
3 = 2 + 1
4 = ......
Man erhält somit alle natürlichen Zahlen größer 0, durch die Definition eines "Startes" (0) und eines Nachfolgers ("Addition" +1).
In dem Link siehe oben, kann man nachlesen, wie man mittels des Lambda-Kalküls, die natürliche Zahlen größer 0 definieren kann.
Wie sieht nun so eine Implementierung des Lambda-Kalküls in Scheme (oder anderen Programmiersprachen) aus?
Wie wir bei den natürlichen Zahlen gesehen haben, muß die 0 definiert werden und wie man den Nachfolger erhält.
Die Definition der null ist relativ simpel, sie muß als Ergebnis die Identität liefern (mehr mathematisch neutrales Element bei den Funktionen ):
(define null (lambda (x) x))
Die Definition des Nachfolgers succ muß als Ergebnis eine Funktion liefern, welche einen "Funktionsaufruf" mehr hat:
(define (succ n) (lambda (f) (lambda (x) (f ((n f) x)))))
Wenn man die 1 nun als one, wie folgt definiert:
(define one (lambda (f) (lambda (x) (f x))))
sieht man, dass die one = (succ null) ist.
Die Frage, die man sich stellen könnte, ist welches sind die anderen Programmiersprachen?
Bei allen Programmiersprachen sollte man die "Church Numerale" implementieren können, welche Funktionen / Prozeduren / Methoden als First Class Values oder Elemente erster Klasse sind.
Dies bedeutet:
a) Funktionen können mit Variablen benannt oder Variablen zugewiesen werden
b) Sie können an Funktionen / Prozeduren / Methoden als Parameter übergeben werden
c) Sie können als Ergebnis einer Funktion / Methode geliefert werden
d) Sie können in Datenstrukturen ausgenommen werden
Diese Definition geht zurück auf Christopher Strachey, ich meine abgesehen davon, dass er aus England kommt, scheint er doch einen guten Job gemacht zu haben
Gruß JJR