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, а с другой - список.

Другие вопросы по тегам