операторы умножения и деления поддерживаются сплавом?

Мне интересно, поддерживаются ли операторы умножения и деления Alloy. Я попробовал "*" в качестве оператора умножения, но он не работает. Хотя "+" работает.

Большое спасибо. С уважением, Фатхия


person Fathiyeh    schedule 17.12.2013    source источник


Ответы (2)


Арифметические операторы поддерживаются встроенными функциями: plus/add, minus/sub, mul, div, rem.

one sig S {
  x, y: Int,
  pres, sres, mres, rres, dres: Int
} {
  pres = plus[x, y]
  sres = sub[x, y]
  mres = mul[x, y]
  rres = rem[x, y]
  dres = div[x, y]
}

run {}
person Aleksandar Milicevic    schedule 17.12.2013
comment
Большое спасибо, Александр. Это действительно помогло. - person Fathiyeh; 20.12.2013
comment
Мне интересно, поддерживаются ли другие типы данных, такие как числа с плавающей запятой? Я действительно ценю твою помощь. - person Fathiyeh; 20.12.2013
comment
Поплавки не поддерживаются. - person Aleksandar Milicevic; 20.12.2013
comment
Спасибо. Можно ли написать код для нахождения двух целых чисел, деление которых меньше 2/3? или поскольку 2/3 не является целым числом, он не может его поддерживать и, например, возвращает в результате 1 и 2? - person Fathiyeh; 20.12.2013
comment
@Fathiyeh Это действительно отдельный вопрос, но вы можете представлять числа с плавающей запятой как рациональные числа с помощью новой подписи с числителем и знаменателем и писать для них функции сравнения. - person Michael Mior; 23.09.2019

Из Software Abstractions (издание 2006 г.) Дэниела Джексона , п. 135, ответ в обсуждении умножения гласит: «Нет, это не так» и продолжает объяснять, что модели, которые требуют этого, часто плохо подходят для моделирования в Alloy.

person Pekka    schedule 17.12.2013