Трудно сказать из ограниченного примера, каков ваш реальный вариант использования.Списки составлены так, чтобы содержать различное количество элементов, а функции занимают постоянное количество элементов, поэтому они не соответствуют друг другу.Возможно, имеет смысл использовать кортеж, а не список:
let tup = (1,2,3)
let addAll (a, b, c) =
a + b + c
addAll tup
Кортежи содержат фиксированное количество элементов, но их можно легко создавать и деконструировать, что позволит вам сразу передать все параметры в вашу функцию.
Вы также можете делать то, что просили об использовании отражения, но это может сломаться в будущих версиях F #, и это почти никогда не будет хорошим дизайном для простого случая, подобного этому.Это также медленно и, как вы можете видеть из числа downcasts и бокса, это также не очень безопасно:
let lst = [1;2;3]
let addAll a b c =
a + b + c
let addAllVal = addAll
let f = addAllVal.GetType().GetMethod("Invoke", [| typeof<int>; typeof<int>; typeof<int> |])
let res = f.Invoke(addAllVal, Array.map box (Array.ofList lst)) :?> int