Для работы с последовательностями вместо списков существует компактное решение:
let diff x = Seq.map2 (-) (Seq.skip 1 x) x
Это не будет работать со списками, поскольку List.map2
требует, чтобы его аргументы имели одинаковую длину.Seq.map2
не имеет этого требования.
Для вашего конкретного случая вы можете сделать:
[1;1;2;3;5;8;13;21] |> diff |> List.ofSeq
, если хотите, чтобы результат был списком.