Oprócz innych odpowiedzi, oto kilka "prawie rozwiązań". Nie są one dokładnie tym, czego chcieli, ale i tak warto je poznać.
Korzystanie z listy (lub tablicę) i dopasowanie Wzór:
let f = function
| [a, b] -> ...
| [a] -> ...
| [] -> failwith "too few arguments"
| _ -> failwith "too many arguments"
f ["a"]
f ["a" ; "b"]
problemów: parametry nie są nazwane, nie wynika z funkcji podpisu ile parametry trzeba.
Używanie rekordu przejść wszystkie parametry opcjonalne:
type FParams = { a : string; b : string }
let fdefault = { a = "a" ; b = "b" }
let f (pars: FParams) = ...
f { fdefault with b = "c" }
Problem: a jest też opcja, która nie jest to, czego chciał. Może być jednak użyteczny.
To zły nawyk, aby odpowiedzieć, tak naprawdę nie potrzebujesz go, ale to przychodzi mi do głowy. Jeśli twoje argumenty są listą wartości tego samego typu, po prostu ustaw je jako "listę". Jeśli jeden z nich jest opcjonalny (np. Może mieć wartość domyślną, którą można pominąć), dodaj opcjonalny: 'foo (a,? B)'. Możesz także rozważyć DU, jeśli twoje dane mogą być reprezentowane w ten sposób. W przeciwnym razie użyłbym tylko dwóch funkcji. – bytebuster