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 sum
lui-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 == 0
c'est vrai, sum
il 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
g
est alors égal à 6
, cependant, nous pouvons encore appliquer g
. Par exemple, g 4 5 == 15
c'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é?
sum
est 0
sans argument et s'appelle récursivement avec un argument.
reduce
?
args
: empty
, head
et 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
)