2016-11-10 4 views
12

In Haskell verwenden wir den Begriff "Abschnitt", um eine teilweise angewendete Funktion anzugeben, die in der Infixposition verwendet wird. Zum Beispiel für eine Funktion foo :: a -> b -> c und Werte x :: a und y :: b, haben wir die beiden AbschnitteWoher kommt der Name "Abschnitt" für einen partiell angelegten Infix-Operator?

s1 = (x `foo`) :: b -> c == \b -> foo x b 

und

s2 = (`foo` y) :: a -> c == \a -> foo a y 

In der Kategorie Theorie jedoch ein Abschnitt g von f als rechtem inversen definiert ist von f (so dass f . g == id).

Ich sehe keine offensichtliche Verbindung zwischen den beiden Definitionen. Zum Beispiel ist s1 eindeutig keine Umkehrung von foo, zumindest nicht in Hask. Ich nehme an, s1 muss nicht einmal haben eine inverse in Hask.

Ist die kategorientheoretische Definition die Quelle der Haskell-Definition, und wenn ja, wie?

+5

Meine Vermutung ist, dass die beiden völlig unabhängig sind. Ich interpretiere "Abschnitt" als: Sie nehmen '(x + y)', hacken einen Teil davon ab (nehmen Sie einen "Abschnitt"), und überlegen Sie, was bleibt. – chi

+1

Das ist aber ... prosaisch. – chepner

+5

Ich weiß es nicht, aber ich werde versuchen, es herauszufinden. – augustss

Antwort

20

Wie in den Kommentaren darauf hingewiesen wurde, bekam Haskell die Abschnitte von Miranda (und Orwell). David Turner sagt, er habe die Idee von Richard Bird und David Wile bekommen.

Ich habe gerade mit Richard Bird gechattet. Er sagt, er erinnert sich nicht, woher der Name kam, aber er glaubt, dass es David Wile war, der ihn geprägt hat. Leider ist David Wile letztes Jahr gestorben, also werden wir es wahrscheinlich nie erfahren. Aber, Richard gab zu, dass er David Turner und Phil Wadler überzeugt hatte, Abschnitte in ihren Sprachen hinzuzufügen.

Hier ist die Seite von Wile These, die erste Erwähnung von "Abschnitt" ist. http://imgur.com/a/cQDlu

+0

Vielen Dank für die Überprüfung. Ich hatte nie viel darüber nachgedacht, aber so viele andere Dinge basieren auf der Kategorientheorie, dass dies auch möglich erschien. – chepner

2

Möglicherweise kommt es von "Array-Abschnitt" Operation, in erster Linie in Fortran, insbesondere für Spalten- oder Zeilenextraktion verwendet. Das macht Sinn, wenn Sie die Nachschlagetabelle aus einer Zwei-Argument-Funktion erstellen. https://www.phy.ornl.gov/csep/pl/node16.html