Können Sie eine Operation wie "dividiere durch 2" oder "subtrahiere 1" mit nur einem partiell angewendeten Operator übergeben, wobei "add 1" so aussieht:
%Vor%Was passiert, ist, dass 1 als erstes Argument auf (+) angewendet wird und das Listenelement als zweites Argument angewendet wird. Für Addition und Multiplikation spielt diese Reihenfolge der Argumente keine Rolle.
Angenommen, ich möchte 1 von jedem Element subtrahieren (dies wird wahrscheinlich ein häufiger Anfängerfehler sein):
%Vor% 1 wird auf das (-) als erstes Argument angewendet, also bekomme ich anstelle von (list_item - 1)
(1 - list_item)
. Ich kann es so umschreiben, dass es ein negatives addiert, anstatt eines positiven zu subtrahieren:
Ich suche nach einer aussagekräftigeren Art, es zu schreiben, etwa wie ((-) _ 1)
, wobei _
einen Platzhalter wie in der Arc-Sprache bezeichnet. Dies würde dazu führen, dass 1
das zweite Argument für -
ist, also würde es in List.map auf list_item - 1
ausgewertet werden. Wenn Sie also divide by 2
der Liste zuordnen möchten, könnten Sie schreiben:
Kann das gemacht werden oder muss ich (fun x -> x/2)
benutzen? Es scheint, dass wir der Platzhaltersyntax am nächsten kommen, wenn wir ein Lambda mit einem benannten Argument verwenden.
Sie könnten eine Flip-Funktion schreiben, etwa:
%Vor%Ich könnte die Syntax falsch haben, ich bin nicht sonderlich fließend in F #.
In F #, a la Haskell, gibt es keine 'operation sections' und auch keine Platzhalterargumente (anscheinend ein Arc). Sie können einen 'Flip'-Kombinator verwenden, wie in einer anderen Antwort vorgeschlagen, um die Reihenfolge der Argumente umzukehren und dann das erste (jetzt zweite) Argument teilweise anzuwenden.
Aber ich würde einfach
verwenden %Vor%Wenn Sie nicht Code-Golf spielen, glaube ich nicht, dass Sie noch etwas kaufen können, wenn Sie versuchen, ein paar andere Charaktere zu rasieren.
Die von von Logan Capaldo vorgeschlagene flip
-Lösung kann auch mit einem Operator (hier% co_de) geschrieben werden %):
Oder wenn Sie die Operanden andersherum bevorzugen:
%Vor% Bearbeiten: Wenn Sie einen Operator verwenden, der "eher wie ein Platzhalter aussieht" (hier >.
), kommen Sie Ihrer vorgeschlagenen Syntax sehr nahe:
'_' ist leider (?) nicht ein gültiges Operator-Symbol in F # .
Tags und Links f# operators partial-application