Behält Haskell die Funktionszusammensetzung im Auge?

7

Ich habe mich gefragt, ob Haskell den Überblick über das Wetter behält, dass eine Funktion eine Funktionszusammensetzung ist, d. h. wäre es mir möglich, eine Funktion zu definieren, die etwas Ähnliches tut?:

%Vor%     
MYV 29.05.2013, 23:26
quelle

2 Antworten

18

Nein, das wäre nicht möglich.

Zum Beispiel

%Vor%

ist die gleiche Funktion wie

%Vor%

und referenzielle Transparenz erfordern, dass equals durch equals ersetzt werden können. Wenn also compositionSplit möglich wäre, würde

verwendet
  • muss dasselbe Ergebnis für f1 und f2 erzeugen, da dies die gleiche Funktion ist, aber
  • compositionSplit f1 = ((+ 1), (+1)) und compositionSplit f2 = (subtract 1, (+ 3)) wären für die Angabe von compositionSplit erforderlich.
Daniel Fischer 29.05.2013, 23:34
quelle
4

Es könnte . In der streng interpretatorischen nicht kompilierten Implementierung könnten Sie Funktionen als

darstellen %Vor%

und dann definieren Sie einfach

%Vor%

Eine solche Implementierung würde die Funktionsgleichheit (in Bezug auf referentielle Transparenz) als intentional behandeln, nicht erweiterte Gleichheit. Da die Sprache selbst nichts über die Gleichheit der Funktionen AFAIK sagt, sollte dies nichts (außer vielleicht Leistung) beeinflussen.

In kompilierten Implementierungen könnte dies auch erreicht werden, z. indem Provenance für jedes Objekt im Speicher beibehalten wird.

AndrewC gibt ein gewinnendes Gegenargument: Wenn wir die beiden Werte a=f.(g.h) und b=(f.g).h als gleiche Werte betrachten wollen - was wir normalerweise in Haskell tun -, wird fst.unJust.deCompo zwei verschiedene Ergebnisse liefern, referentielle Transparenz brechen. Es kann also nicht Teil des reinen FP-Paradigmas sein. Es müsste etwas zurückgeben, was wir in beiden Fällen auch als gleichwertig betrachten könnten, und wir würden es nicht auseinander nehmen können, ohne die Reinheit zu brechen. Vielleicht könnte so etwas in einer unreinen Monade existieren, aber das ist nicht das, wonach OP leider gefragt hat. :) Also diese Antwort ist falsch.

    
Will Ness 30.05.2013 08:42
quelle

Tags und Links