Вы можете сделать свой код немного чище, как это:
match n < 0 with
| true -> []
| false -> [x] @ clone x (n - 1)
Еще лучше было бы:
if n < 0 then [] else [x] @ clone x (n - 1)
Как правило, если операторы более понятны, чем совпадения для простых логических тестов.
Пока мы это делаем, мы могли бы использовать ::
вместо @
:
if n < 0 then [] else x :: clone x (n - 1)