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 sumstesso 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, summanterrà 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 gcon 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è 0senza 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)