Wie kann ich (wenn alle at) variadische Funktionen emulieren (diese Methoden nicht), so dass ichWie schreibt man eine Variadic-Funktion in F #, die eine ähnliche Haskell-Lösung emuliert?
sum 1 2 3
sum 1 2 3 4 5
sum 1 2 3 4 5 6 7
// etc.
Der obige Code nur als Beispiel gemeint schreiben könnte - natürlich, wenn ich zusammenfassen müsste bis eine Liste dann
[ 1; 2 ; 3] |> List.sum
ist ein viel besserer Weg.
Jedoch habe ich für eine strukturell ähnliche Lösung suchen, wie this Haskell solution
Was auch wichtig ist, ist, dass die normale Syntax für Funktionsaufrufe und Parameterwerte gleich bleibt. So
sum 1 2 3
vs
sum(1, 2, 3)
die effektiv bedeutet, dass
let sum ([<ParamArray>] arr) = ...
nicht in diesem speziellen Fall wird gesucht.
Die Motivation für all dies: Ich untersuche die äußeren Ränder von F # 's Typ System und Syntax. Und ich bin mir vollkommen bewusst, dass ich die Grenze dessen, was bereits möglich ist, überschritten haben könnte.
PS: Meine konkreten Ideen (die ich hier nicht beschrieben habe) können auch ganz anders gelöst werden - also weiß ich es und so habe ich es schon gemacht. Deshalb ist meine Frage nicht: wie kann das anders gelöst werden, aber wie kann das strukturell wie Haskell gelöst werden?
PPS: Doppelte Karma-Punkte, wenn Sie die gesamte Lösung rekursiv machen können.
Siehe Parameter-Arrays hier: https://msdn.microsoft.com/en-us/library/dd233213.aspx –
möglich Duplikat von [Wie schreibe ich eine Funktion, die variable Anzahl von Argumenten in F #] (http: // stackoverflow .com/fragen/674319/howto-write-a-function-nehmen-Variable-Anzahl-von-Argumenten-in-f) – scrwtp
@scrwtp: Ich habe die Frage erweitert. Ich hoffe, es ist jetzt noch klarer, dass dies keine doppelte Frage ist. Zumindest nicht zu deinem Link. – robkuz