In aggiunta alle altre risposte, eccone alcune "quasi soluzioni". Non sono esattamente ciò che volevi, ma vale comunque la pena di saperlo.
Usando una lista (o un array) e pattern matching:
let f = function
| [a, b] -> ...
| [a] -> ...
| [] -> failwith "too few arguments"
| _ -> failwith "too many arguments"
f ["a"]
f ["a" ; "b"]
problemi: parametri non sono chiamati, non è chiaro da firma funzione del numero di parametri che ci vuole.
Utilizzando un record per passare tutti i parametri opzionali:
type FParams = { a : string; b : string }
let fdefault = { a = "a" ; b = "b" }
let f (pars: FParams) = ...
f { fdefault with b = "c" }
Problema: una è anche facoltativa, che non è quello che si voleva. Può essere utile però.
È una cattiva abitudine rispondere, non ne hai veramente bisogno, ma è quello che mi viene in mente. Se i tuoi argomenti sono un elenco di valori dello stesso tipo, basta renderli un 'elenco'. Se uno di questi è facoltativo (ad esempio può avere un valore predefinito che può essere omesso), rendilo opzionale: 'pippo (a,? B)'. Puoi anche considerare DU, se i tuoi dati possono essere rappresentati in questo modo. Altrimenti, userei solo due funzioni. – bytebuster