Funktion Anwendungsfunktion in Haskell

7

Sagen wir, ich habe eine Liste von Funktionen

%Vor%

jede mit dem Typ a -> a

Ich habe auch eine Liste von Werten, sagen Zahlen, aber alles sollte hier funktionieren

%Vor%

Ich möchte jede Funktion in functions auf den entsprechenden Wert in vals

anwenden

Mein erster Instinkt ist, ein Lambda und zipWith wie:

zu verwenden %Vor%

Aber ehrlich gesagt sieht das hässlich aus und nicht etwas, was ich in einer so netten Sprache wie Haskell erwarten würde. Eine Funktionsanwendungsfunktion klingt wie die Lösung. Gibt es so etwas? Fehle ich etwas und es gibt eine viel bessere Lösung für mein Problem? Ich habe tatsächlich dieses Konstrukt für eine Projekt-Euler-Lösung geschrieben. Es funktioniert, aber ich mag es nicht.

    
Juan Pablo Santos 31.07.2013, 03:30
quelle

3 Antworten

16
%Vor%

$ ist eine Funktionsanwendung. Die Tatsache, dass es eine besonders niedrige Priorität hat, führt manchmal zu einer Schleife.

    
Thomas M. DuBuisson 31.07.2013, 03:35
quelle
11

Seltsamerweise

%Vor%

funktioniert auch!

Aber wirklich, zipWith ($) ist der richtige Weg dies zu schreiben.

    
MtnViewMark 31.07.2013 03:41
quelle
3

Hier ist eine weitere Option, die Sie vielleicht ein wenig nachdenken lässt.

%Vor%

A ZipList ist nur ein Wrapper um eine Liste. Die Definition von <*> für ein ZipList sagt "Zip die Liste der Funktionen (auf der linken Seite) mit der Liste der Argumente (auf der rechten Seite) durch Anwenden jeder Funktion auf ein Argument wiederum".

Dies steht im Gegensatz zur Definition von <*> für eine reguläre Liste, die besagt "nimm jedes mögliche Paar von (Funktion, Argument) aus diesen beiden Listen und übertrage die Funktion auf das Argument".

    
Chris Taylor 31.07.2013 08:12
quelle