Sto pensando di rendere disponibili le funzioni curry e variadiche in un linguaggio di programmazione funzionale tipicamente dinamicamente, ma mi chiedo se sia possibile o meno.
Ecco alcuni pseudocodici:
sum = if @args.empty then 0 else @args.head + sum @args.tail
che dovrebbe presumibilmente sommare tutti i suoi argomenti. Quindi, se sum
stesso viene trattato un numero, il risultato è 0
. per esempio,
sum + 1
è uguale a 1, supponendo che +
possa funzionare solo sui numeri. Tuttavia, anche sum == 0
è vero, sum
manterrà comunque il suo valore e la sua proprietà funzionale, indipendentemente da quanti argomenti vengono forniti (quindi "parzialmente applicati" e "variadici" allo stesso tempo), ad esempio, se dichiaro
g = sum 1 2 3
allora g
è uguale a 6
, tuttavia, possiamo ancora applicare ulteriormente g
. Ad esempio, g 4 5 == 15
è vero. In questo caso, non possiamo sostituire l'oggetto g
con un valore letterale 6
, perché sebbene producano lo stesso valore se trattati come numeri interi, contengono codici diversi all'interno.
Se questo design viene utilizzato in un vero linguaggio di programmazione, causerà confusione o ambiguità?
sum
è 0
senza argomento e si chiama ricorsivamente con un argomento.
reduce
?
args
: empty
, head
, e tail
. Queste sono tutte funzioni di elenco, suggerendo che forse la cosa più semplice e più semplice da fare sarebbe usare un elenco in cui si troverebbero le cose variabili. (Quindi, sum [1, 2, 3]
invece di sum 1 2 3
)