Nach meinem Verständnis sind Teilfunktionen Funktionen, die wir erhalten, wenn wir weniger Parameter an eine Funktion übergeben als erwartet. Wenn dies beispielsweise in Python direkt gültig wäre:
>>> def add(x,y):
... return x+y
...
>>> new_function = add(1)
>>> new_function(2)
3
Im obigen Snippet new_function
ist eine Teilfunktion. Laut Haskell Wiki ist die Definition der Teilfunktion jedoch
Eine Teilfunktion ist eine Funktion, die nicht für alle möglichen Argumente des angegebenen Typs definiert ist.
Meine Frage ist also: Was genau ist mit "Teilfunktion" gemeint?
python
haskell
functional-programming
partial-application
partial-functions
Saurabh Kukade
quelle
quelle
partial
führt eine Teilanwendung durch , während Haskell dies automatisch tut. Der Wiki-Eintrag bezieht sich auf Teilfunktionen , ein Begriff aus der Mathematik.add 3 5
ist keine Einzelfunktionsanwendung. Dies gilt zuerst füradd
3, um eine neue Funktion zu erhalten, die dann auf 5 angewendet wird.partial
Methode eine Vorwärtsdeklaration einer optional implementierten privaten Methode an anderer Stelle in der Projektcodebasis.new_function = functools.partial(add, 1)
Antworten:
Sie verwechseln hier zwei Konzepte. Eine teilweise angewendete Funktion [haskell-wiki] mit einer teilweise Funktion [haskell-wiki] .
Eine teilweise angewendete Funktion ist:
wohingegen eine Teilfunktion tatsächlich eine Nicht-Gesamtfunktion ist:
quelle
Eine Teilfunktion (sowohl im Kontext der funktionalen Programmierung als auch der Mathematik) ist genau das, was das Wiki sagt: eine Funktion, die nicht für alle möglichen Argumente definiert ist. Im Zusammenhang mit der Programmierung interpretieren wir "nicht definiert" normalerweise als eines von mehreren Dingen, einschließlich undefiniertem Verhalten, Ausnahmen oder Nichtbeendigung.
Ein Beispiel für eine Teilfunktion wäre die Ganzzahldivision, die nicht definiert ist, wenn der Divisor 0 ist (in Haskell wird ein Fehler ausgegeben).
Dieser Code würde einfach einen Fehler in Python verursachen, aber wenn er wie beabsichtigt funktioniert, wäre er eine Gesamtfunktion (dh keine Teilfunktion).
Wie Kommentatoren bereits betont haben, denken Sie höchstwahrscheinlich an die Tatsache, dass es sich um eine teilweise angewendete Funktion handelt.
quelle
Die Antworten erklären alles, ich werde nur ein Beispiel in jeder Sprache hinzufügen:
Dies ist weder eine Teilfunktion noch eine Curry-Funktion . Dies ist nur eine Funktion, für die Sie nicht alle Argumente angegeben haben .
Eine Curry-Funktion in Python sollte folgendermaßen aussehen:
und in haskell:
Eine Teilfunktion in Python:
Und in Haskell, wie Ihr Link zeigte:
Im Grunde genommen das Gegenteil: Dies ist eine Funktion, die für alle Eingaben dieses Typs funktioniert. Hier ist ein Beispiel in Python:
und dies funktioniert sogar für unendliche Listen, wenn Sie einen kleinen Trick verwenden:
Und das Äquivalent in Haskell:
Hier hängen die Funktionen nicht für immer. Das Konzept ist das gleiche: Für jede Liste funktioniert die Funktion.
quelle