Значимое имя поля для троичного отношения между программой, данными и результатом? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть подпись для представления программ:

sig Program {
    ???: Data -> Result
}

Каждая программа отображает входные данные в выходной результат.Итак, существует троичное отношение (Программа -> Данные -> Результат).

Обратите внимание на вопросительные знаки для имени поля.Какое имя поля вы предлагаете?

Имя ввода-вывода кажется хорошим:

sig Program {
    IO: Data -> Result
}

Тогда я могу написать элегантные выражения, такие как:

all p: Program | p.IO ...

Однако имяIO имеет смысл только для (Данные -> Результат), а не (Программа -> Данные -> Результат).

Я застрял.Что вы предлагаете?

1 Ответ

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

ИМХО, имена полей в большинстве случаев зависят от подписи, в которой они объявлены, и это действительно хорошо.

Если вы посмотрите на модуль случайных образцов в Alloy (например, module examples/puzzle/farmer), вы увидите, что не всегда поля имеют значение вне их соответствующих сигнатур:

sig State {
   near: set Object,
   far: set Object
}

Здесь близкие и далекие на самом деле не дают намеков на их «временную» природу.

Короче говоря, я бы придерживался io для краткости.

На самом деле, я предпочитаю, чтобы имена:

  • полей, фактов, предков, утверждений, параметров, ... были в нижнем регистре
  • подписи были заглавными *Перечисление 1018 *
  • (внешнее разрешение) и одноэлементные подписи в верхнем регистре
...