Además de las otras respuestas, aquí hay algunas más "casi soluciones". No son estrictamente lo que querías, pero vale la pena saber de todos modos.
El uso de una lista (o una matriz) y la coincidencia de patrones:
let f = function
| [a, b] -> ...
| [a] -> ...
| [] -> failwith "too few arguments"
| _ -> failwith "too many arguments"
f ["a"]
f ["a" ; "b"]
problemas: los parámetros no son nombrados, no está claro a partir de la firma función de cuántos parámetros que se necesita.
El uso de un registro de pasar todos los parámetros opcionales:
type FParams = { a : string; b : string }
let fdefault = { a = "a" ; b = "b" }
let f (pars: FParams) = ...
f { fdefault with b = "c" }
Problema: A es también opcional, que no es lo que quería. Puede ser útil sin embargo.
Es un mal hábito responder, realmente no lo necesitas, pero eso es lo que se me viene a la mente. Si tus argumentos son una lista de valores del mismo tipo, simplemente hazlos una 'lista'. Si uno de ellos es opcional (por ejemplo, puede tener un valor predeterminado que se puede omitir), hágalo opcional: 'foo (a,? B)'. También puede considerar DU, si sus datos pueden ser representados de esta manera. De lo contrario, solo usaría dos funciones. – bytebuster