Zusätzlich zu den anderen Antworten, hier sind ein paar mehr "fast Lösungen". Sie sind nicht genau das, was du wolltest, aber sie sind trotzdem wissenswert.
Mit einer Liste (oder ein Array) und Pattern-Matching:
let f = function
| [a, b] -> ...
| [a] -> ...
| [] -> failwith "too few arguments"
| _ -> failwith "too many arguments"
f ["a"]
f ["a" ; "b"]
Probleme: Parameter nicht genannt werden, nicht klar von Funktionssignatur, wie viele Parameter es dauert.
einen Datensatz Mit allen optionalen Parameter zu übergeben:
type FParams = { a : string; b : string }
let fdefault = { a = "a" ; b = "b" }
let f (pars: FParams) = ...
f { fdefault with b = "c" }
Problem: a ist ebenfalls optional, das ist nicht, was Sie ist wollte. Kann aber nützlich sein.
Es ist eine schlechte Angewohnheit zu antworten, Sie brauchen es nicht wirklich, aber das kommt mir in den Sinn. Wenn Ihre Argumente eine Liste von Werten desselben Typs sind, machen Sie sie einfach zu einer 'Liste'. Wenn einer von ihnen optional ist (z. B. kann er einen Standardwert haben, der weggelassen werden kann), mach es optional: 'foo (a,? B)'. Sie können auch DU in Betracht ziehen, wenn Ihre Daten auf diese Weise dargestellt werden können. Ansonsten würde ich nur zwei Funktionen verwenden. – bytebuster