Как вы сравниваете шаблон с отрицательным 1?
Это не с "the pattern is expected to be formed with a constructor (of datavtype)
", поскольку он соответствует специальному синтаксису free() для линейных конструкторов, а не отрицательному знаку.
#include "share/atspre_staload.hats"
implement main0() =
case ~1 of
| ~1 => println!("ok")
| _ => ()
Это не с "operator fixity cannot be resolved
Msgstr "Это не поможет добавить паренсы или сделать бинарный оператор.
#include "share/atspre_staload.hats"
implement main0() =
case ~1 of
| -1 => println!("ok")
| _ => ()
Это не так, как переменная в case
вводит новую привязку, не связанную с привязкой уже в области:
#include "share/atspre_staload.hats"
implement main0() =
let
val negative_one = ~1
in
case ~2 of
| negative_one => println!("unintend match")
| _ => () // error: this pattern match clause is redundant
end
Это самое близкое, что мы можем получить? Насколько менее производительный это?
#include "share/atspre_staload.hats"
implement main0() =
let
val negative_one = ~1
in
ifcase
| negative_one = ~1 => println!("this works")
| _ => ()
end
1 ответ
Решение
В САР ~1 не считается константой; это приложение-функция: ~ применяется к 1. Вы можете определить отрицательный 1 следующим образом:
#define NEG1 %(~1) // not yet working // to be fixed
или же
#define NEG1 %(0-1) // this one is currently working
Тогда вы можете написать:
case ~1 of
| 1 => ...
| NEG1 => ...
Использование 'ifcase' (вместо 'case') должно быть одинаково эффективным.