Оператор суммирования наборов / последовательностей?

У меня есть набор, S = { 1, 2, 3, 4, 5 }.

Если бы я хотел суммировать это в стандартной логике, это просто ∑S (нет MathJax на SO, поэтому я не могу это хорошо отформатировать).

Какой эквивалент VDM? Я не вижу ничего в разделе числовых значений / наборов справочника по языку.

2 ответа

Решение

Для этого нет стандартной библиотечной функции (хотя, возможно, она должна быть). Вы суммируете набор с помощью простой рекурсивной функции:

sum: set of nat +> nat
sum(s) ==
    if s = {}
    then 0
    else let e in set s in
        e + sum(s \ {e})
measure card s;

"Let" выбирает произвольный элемент из набора, а затем прибавляет его к сумме остатка. Мера говорит, что рекурсия всегда имеет дело с меньшими наборами.

Это должно работать:

sum(S)

Но найти это можно было очень легко.

Другие вопросы по тегам