Je pense à rendre les fonctions currying et variadic disponibles dans un langage de programmation fonctionnel typé dynamiquement, mais je me demande si c'est possible ou non.
Voici quelques pseudocodes:
sum = if @args.empty then 0 else @args.head + sum @args.tail
qui est censé résumer tous ses arguments. Ensuite, si sumlui-même est traité comme un nombre, le résultat est 0. par exemple,
sum + 1
est égal à 1, en supposant que +cela ne peut fonctionner que sur des nombres. Cependant, même si sum == 0c'est vrai, sumil conservera sa valeur et sa propriété fonctionnelle quel que soit le nombre d'arguments fournis (d'où "partiellement appliqué" et "variadique" en même temps), par exemple, si je déclare
g = sum 1 2 3
gest alors égal à 6, cependant, nous pouvons encore appliquer g. Par exemple, g 4 5 == 15c'est vrai. Dans ce cas, nous ne pouvons pas remplacer l'objetg par un littéral 6, car bien qu'ils produisent la même valeur lorsqu'ils sont traités comme un entier, ils contiennent différents codes à l'intérieur.
Si cette conception est utilisée dans un vrai langage de programmation, cela causera-t-il une confusion ou une ambiguïté?
sumest 0sans argument et s'appelle récursivement avec un argument.
reduce?
args: empty, headet tail. Ce sont toutes des fonctions de liste, ce qui suggère que la chose la plus simple et la plus simple à faire serait peut-être d'utiliser une liste où se trouvent les éléments variadiques. (Donc, sum [1, 2, 3]au lieu de sum 1 2 3)