Эйфелева: есть ли способ выразить двойное выражение в eiffel? - PullRequest
0 голосов
/ 11 октября 2018

Как в психологии двойное связывание, есть ли способ сказать, что одно выражение подразумевает другое, и наоборот?

valid_last_error: attached last_error implies not attached last_success_message
valid_last_success_message: attached last_success_message implies not attached last_error

будет выглядеть примерно так:

valid_last_error: attached last_error double_binded_not attached last_success_message

, что может быть эквивалентно

valid_last_error: attached last_error never_with attached last_success_message
  • T означает True booleanвыражение
  • F для False
  • R для результата

подразумевает (a, b: BOOLEAN): BOOLEAN

a b R
T T T
T F F
F T T
F F T

и (a, b: BOOLEAN): BOOLEAN

a b R
T T T
T F F
F T F
F F F

или (a, b: BOOLEAN): BOOLEAN

a b R
T T T
T F T
F T T
F F F

xor (a, b: BOOLEAN): BOOLEAN

a b R
T T F
T F T
F T T
F F F

double_implies (a, b: BOOLEAN): BOOLEAN

a b R
T T F
T F T
F T T
F F T

в качестве, возможно, более объясняющего примера (более известного) вместо записи

invalid_index_implies_off: index < 1 implies off
off_implies_invalid_index: off implies index < 1

мы могли бы написать:

index_coherent_with_off: index < 1 never_both off

, который бы просто добавил функцию в класс BOOLEAN, такую ​​как

alias never_with, alias reversible_implies (v: like Current): like Current
    do
        if Current and v then
            Result := False
        else
            Result := True
        end
    end

Надеюсь, теперь все поняли мою точку зрения ... Яне знаю, существует ли такой арифметический оператор.

Мы могли бы расширить его на переменное число параметров

1 Ответ

0 голосов
/ 11 октября 2018

Единственный ответ на мой вопрос - определить функцию в классе утилит, например

feature - может быть в классе BOOLEAN

double_implies, reversible_implies, never_both (a, b: BOOLEAN): BOOLEAN
        -- Into boolean class with never_with
    do
        if a and b then
            Result := False
        else
            Result := True
        end
    end
...