Python: Ich konnte in Lambda rekursieren

Referenzierter Artikel: [Kommentare zu Versuch, Nebenwirkungen und Zuweisungen im Fizz Buzz-Problem zu unterdrücken [JavaScript, VB.Net, Python3, CommonLisp, Clojure, HSP, R-Sprache] / 543eed9386103ec9c58c # comment-7f730579d0e5e1267525) Ein Liner in Python: Rekursiv Sie müssen keinen komplizierten Y-Kombinator erstellen, sondern nur die Funktion, um ein Argument zu erhalten, das sich selbst empfängt.

Ich dachte, ich könnte keine Rekursion in Lambda schreiben (es sei denn, ich hätte etwas Besonderes gemacht), aber ich kann. Das wusste ich nicht. Nein, ich glaube, ich bin früher durch mein Gehirn gegangen, weil ich es nicht verstehen konnte, selbst wenn ich es gelesen habe.

Ich habe den Boden selbst unter Bezugnahme auf den Artikel geschrieben.

do = pack_to_tuple = lambda *x : x
case = unpack_and_evaluate_in_order_then_return_last = lambda x : x[-1]
otherwise = True

f = ( lambda x :
        case(     x == 0   and do( 1 )
              or otherwise and do( x * f( x - 1 ) )
             )
    )

f2 = ( lambda x :
       ( lambda f : f( f,  x ) ) ( lambda f, x :
                                     case(     x == 0   and do( 1 )
                                           or otherwise and do( x * f(f,  x - 1 ) )
                                         )
                                 )
     )

print(f(10), f2(10))

python


#Ergebnis
3628800 3628800

Es macht dasselbe wie die obere Funktion `f``` und die untere Funktion` f2` ``. Der obere ist normalerweise rekursiv. Normalerweise mache ich das und verstehe. Was ist mit dem Boden? Es ist ein wenig schwierig ... Haben Sie das Gefühl, Sie erstellen eine Funktion, die den Multiplikator mit anonymer Rekursion zurückgibt und ihn f2 nennt?

Ich weiß nicht, was es ist ... aber es kann mechanisch von oben nach unten konvertiert werden, also ist es ganz so, wenn Sie es brauchen.

Bitte kommentieren Sie, ob es anders ist oder so.

Nachtrag Ist das in Ordnung?

Referenzartikel: [Python] Rekursiv mit Lambda

Mit Schlüsselwortargumenten ...

python


f3 = ( lambda x, f =  lambda f, x : case(     x == 0   and do( 1 )
                                		or otherwise and do( x * f(f,  x - 1 ) )
                            		)
       : f( f,  x ) 
     )

Sauber. Irgendwie ist die Bedeutung leicht zu verstehen. Ich habe viel gelernt.

Recommended Posts

Python: Ich konnte in Lambda rekursieren
Python: Kann in Lambda wiederholt werden
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Ich möchte Python mit VS-Code ausführen können
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Was ich süchtig nach Python Autorun war
Was ich mit json.dumps in Pythons base64-Codierung süchtig gemacht habe
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich war süchtig nach falschen Klassenvariablen und Instanzvariablen in Python
Ich konnte den Thermodrucker "PAPERANG" aus Python (Windows10, Python3.6) drucken.
Ich möchte Dunnetts Test in Python machen
Ich möchte mit Python ein Fenster erstellen
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich möchte den Fortschritt in Python anzeigen!
Ich konnte AWS-Batch mit Python, Moto verspotten, also werde ich es verlassen
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Auch mit JavaScript möchte ich Python `range ()` sehen!
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich möchte eine Datei mit Python zufällig testen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte Lambda mit Python auf Mac AWS!
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich war süchtig danach, logging.getLogger mit Flask 1.1.x zu versuchen
Ich möchte R-Datensatz mit Python verwenden
Wovon ich süchtig war, als ich Python Tornado benutzte
Ich möchte am Ende etwas mit Python machen
Ich möchte Strings in Kotlin wie Python manipulieren!
[Python] Scraping in AWS Lambda
Liebe wurde in Python 2 geboren
Melden Sie sich auf der Website in Python an
Sprechen mit Python [Text zu Sprache]
Wie man in Python entwickelt
Ich verstehe Python auf Japanisch!
Was ich in Python gelernt habe
Liebe wurde in Python 3 geboren
Wie benutzt man Python Lambda?
Post an Slack in Python
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich konnte die Web-App-Authentifizierung mit Flask-Login implementieren
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
So importieren Sie die in EFS eingerichtete Python-Bibliothek in Lambda
Ich möchte Daten mit Python analysieren können (Teil 1)