OCaml: соответствие любому негативу
Есть ли способ получить сопоставление с шаблоном, чтобы сопоставить мое значение с любым отрицательным числом? Неважно, что такое отрицательное число, мне просто нужно сопоставить с любым отрицательным.
Я выполнил то, что хочу, с помощью этого простого кода:
let y = if(n < 0) then 0 else n in
match y with
0 -> []
| _ -> [x] @ clone x (n - 1)
Но я хочу устранить это if
заявление и просто получить его, чтобы проверить это как еще один случай в match
заявление
3 ответа
Да, используйте охрану:
match n with
_ when n < 0 -> []
| _ -> [x] @ clone x (n - 1)
Вы можете сделать свой код немного чище, как это:
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)
Есть ключевое слово когда. По голове (сейчас я не могу проверить)
пусть y = соответствует n с | когда n < 0 -> 0 | 0 -> [] | _ -> [x] @ клон x (n - 1)
Однако даже ваш пример не должен работать. Как с одной стороны, вы возвращаете int, а с другой - список.