geschrieben, dass wir Nachteile nennen (Dies kommt von Lisp/Schema usw.). Es nimmt ein Element und eine Liste und fügt dieses Element dem Kopf (Start) der Liste hinzu. Beachten Sie, dass dies in Python nicht effizient ist. def cons(x,xs):
return [x] + xs
Nun wird die Funktion Falte (streng nach links falten gesprochen). Dies ist eine Funktion in eigener Sache und kann für viele Dinge verwendet werden (siehe den Link) das Python-Äquivalent wäre wahrscheinlich reduce
.Beachten Sie, dass es eine Funktion nimmt f
und wendet diese Funktion auf den Kopf der Liste und der variablen acc
(kurz für Akkumulator)
def foldl(f,acc,xs):
if not xs:
return acc
head, *tail = xs
return foldl(f, f(head,acc), tail)
Jetzt können wir eine Version von Reverse schreiben, die rekursiv ist (weil fache rekursiv)
def reverse(xs):
return foldl(cons, [], xs)
Also eine Falte verkörpert die Idee einer rekursiven Funktion. Zum Beispiel, wenn wir wollten eine Liste von Zahlen rekursiv fassen wir es als definieren könnte:
from operator import add # this is just '+' as a function
def sum(xs):
return foldl(add, 0, xs)
Wenn wir eine richtige Falte zu definieren, waren wie folgt:
def foldr(f,acc,xs):
if not xs:
return acc
head, *tail = xs
return f(head, foldr(f, acc, tail))
Dann ruft die foldr(cons, [], xs)
zurückkehren eine Liste identisch mit der ursprünglichen.
Um die Grundlagen der Rekursion zu verstehen, könnte [this] (http://stackoverflow.com/q/30214531/1903116) Ihnen helfen. – thefourtheye
Sie haben keine Rekursion (Sie rufen nie Revlist innerhalb Revlist auf) und Sie geben immer ein einzelnes Element zurück, wie erwarten Sie, eine umgekehrte Liste zu bekommen? Sie sollten wahrscheinlich ein wenig mehr studieren;) – LeartS
Ja, ich weiß, ich sollte und das ist auch nicht vollständig, aber ich bin irgendwie stecken :( –