Ich denke darüber nach, sowohl Currying- als auch Variadic-Funktionen in einer dynamisch typisierten funktionalen Programmiersprache verfügbar zu machen, aber ich frage mich, ob dies möglich ist oder nicht.
Hier sind einige Pseudocodes:
sum = if @args.empty then 0 else @args.head + sum @args.tail
das soll angeblich alle seine Argumente zusammenfassen. Wenn dann sumselbst eine Zahl behandelt wird, dann ist das Ergebnis 0. beispielsweise,
sum + 1
ist gleich 1, vorausgesetzt, dass +nur mit Zahlen gearbeitet werden kann. Auch wenn dies sum == 0zutrifft, sumbleiben Wert und Funktionseigenschaft erhalten, egal wie viele Argumente gleichzeitig angegeben werden (daher "teilweise angewendet" und "variadisch"), zum Beispiel, wenn ich dies erkläre
g = sum 1 2 3
dann gist gleich 6aber wir können uns noch weiter bewerben g. Zum Beispiel g 4 5 == 15ist wahr. In diesem Fall können wir das Objekt nicht gdurch ein Literal ersetzen 6, da sie zwar denselben Wert ergeben, wenn sie als Ganzzahl behandelt werden, aber unterschiedliche Codes enthalten.
Wenn dieses Design in einer echten Programmiersprache verwendet wird, führt es dann zu Verwirrung oder Mehrdeutigkeit?
sumist 0ohne Argument und ruft sich rekursiv mit einem Argument auf.
reduce?
args: empty, head, und tail. Dies sind alles Listenfunktionen, was darauf hindeutet, dass es möglicherweise einfacher und unkomplizierter ist, eine Liste zu verwenden, in der sich die verschiedenen Funktionen befinden. (Also, sum [1, 2, 3]anstatt sum 1 2 3)