Auf der Suche nach einem Church-Encoding (Lambda-Kalkül) um zu definieren,,! =

8

Ich muss einige Lambda-Funktionen für & gt; , & lt; und! =

Ich habe keine Idee, wie, könnte mir bitte jemand helfen? PS: Wir haben gerade mit Lambda Calculus begonnen, also bitte keine Vorkenntnisse voraussetzen.

Vielen Dank im Voraus!

Bearbeiten - Was ich meinte, war Arithmetik in der Lambda-Kalkül

Edit 2 - Genauer: Suchen Sie nach einem Church-encoding (Lambda-Kalkül), um < , > , !=

zu definieren

Anmerkung des Herausgebers : Ich denke, das ist es, was das OP zu fragen versucht:

Ich versuche, die folgenden Operationen im untypisierten Lambda-Kalkül mit der Church-Codierung zu implementieren:

  1. Größer als ( GT oder > ).
  2. Kleiner als ( LT oder < ).
  3. Ungleich ( NE oder != ).

Ich kann bereits Folgendes implementieren:

  1. Boolescher Wert ( TRUE oder λx.λy.x ).
  2. Boolean false ( FALSE oder λx.λy.y ).
  3. Logisch und ( AND oder λp.λq.p q p ).
  4. Logisch oder ( OR oder λp.λq.p p q ).
  5. Logisch nicht ( NOT oder λp.λa.λb.p b a ).

Wie würden Sie die Funktionen GT , LT und NE im untypisierten Lambda-Kalkül schreiben?

    
Blnpwr 11.12.2013, 15:48
quelle

3 Antworten

4

"Eine Einführung in die funktionale Programmierung durch Lambda-Kalkül" von Greg Michaelson

Beginnend mit

  

Abschnitt 4.8.3. Vergleich

     

Es gibt eine Reihe von Möglichkeiten, die Gleichheit zwischen Zahlen zu definieren. Ein   Ansatz ist zu beachten, dass der Unterschied zwischen zwei gleichen Zahlen ist   Null. Aber wenn wir eine Zahl von einer kleineren Zahl subtrahieren, dann auch   Nullen, also müssen wir den absoluten Unterschied zwischen ihnen finden; das   Unterschied unabhängig von der Reihenfolge des Vergleichs. Um das Absolute zu finden   Unterschied zwischen zwei Zahlen, addieren Sie den Unterschied zwischen dem ersten   und der zweite zum Unterschied zwischen dem zweiten und dem ersten:

     

def abs_diff x y = addieren (sub x y) (suby x)

     

Wenn sie beide gleich sind, sind die absoluten Differenzen null   weil das Ergebnis davon, jedes von dem anderen zu nehmen, Null ist. Wenn die   zuerst ist größer als die Sekunde, dann ist die absolute Differenz   der erste minus der zweite, weil der zweite minus der erste sein wird   Null. In ähnlicher Weise, wenn die zweite größer ist als die erste, dann die   Differenz ist die zweite minus der erste, weil das erste minus   die Sekunde wird Null sein.

     

Somit können wir definieren:

     

def gleich x y = ist null (abs_diff x y)

     

Wir können auch Subtraktion verwenden, um arithmetische Ungleichungen zu definieren. Zum   Beispiel: Eine Zahl ist größer als eine andere, wenn sie die zweite subtrahiert   Von der ersten gibt ein Ergebnis ungleich Null:

     

def größer x y = nicht (iszero (sub x y))

Weniger ist im Abschnitt Lösungen für Übungen auf der Rückseite definiert.

  

def weniger x y = größer y x

Wenn Sie nun das Buch im Link verwenden, finden Sie alle untergeordneten Funktionen und Sie haben =, & gt ;, & lt ;. Während das Buch nicht definiert! = Sollte es offensichtlich sein.

BEARBEITEN

Pro Kommentar von WillNess

  

4.8.2. Subtraktion

     

Um den Unterschied zwischen zwei Zahlen zu finden, finden Sie den Unterschied zwischen den Zahlen nach dem Dekrementieren von beiden. Der Unterschied zwischen einer Zahl und Null ist die Zahl:

     

rec unter x y =
    wenn iszero y
    dann x
    sonst sub (pred x) (pred y)

Bitte beachten Sie "Now using the book in the link just find all of the subordinate functions".

Ich plane nicht, alle untergeordneten Funktionen aufzuspüren und sie hier aufzulisten, weil sie hier explodieren würden, um viele Funktionen neu zu erstellen. Ich habe Teile des Buches gelesen und durchgearbeitet und es ist umfassend genug, dass mir nicht an Informationen mangelte.

    
Guy Coder 11.12.2013 22:12
quelle
1

Sie brauchen auch die Implementierung von natürlichen Zahlen. Dafür werden Sie Vergleichsoperatoren schreiben, nicht wahr?

Ich denke, dass ich mich an die Implementierung von natürlichen Zahlen erinnere. Eine Zahl n wird als Funktion dargestellt, die eine Funktion f und einen Wert x verwendet und f n mal auf x .

%Vor%     
md2perpe 11.12.2013 20:12
quelle
1

Der Wikipedia-Artikel über die Kodierung in der Kirche enthält einen Abschnitt zu Prädikaten , der EQ und LEQ     

dansalmo 13.12.2013 00:16
quelle