Как вы сравниваете шаблон с отрицательным 1? - PullRequest
0 голосов
/ 26 мая 2018

Это не с "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».Это не помогает добавлять имена или делать двоичный оператор.

#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 Ответ

0 голосов
/ 27 мая 2018

В САР ~ 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') должно быть одинаково эффективным.

...