Я хочу реализовать очень простой автомат, который ограничивает число последовательных 1s в списке единиц и нулей (например, [0,1,1,0,1,1,1]).Как использовать clpfd: automaton для ограничения значения счетчика в SICStus Prolog?
Мой автомат выглядит следующим образом:
% 'Day' is a list of clpfd variables
% 'Allowed' is an integer
%
% consecutiveOnes(+Day, +Allowed)
consecutiveOnes(Day, Allowed) :-
automaton(Day, _, Day,
[source(n)],
[
arc(n, 0, n, [0] ),
arc(n, 1, n, [C+1])
],
[C],
[0],
[_N]
).
% example 1:
% consecutiveOnes([0,0,0,1,1,1], 2) -> there are three consecutive 1s and we allow only 2 -> Fail.
% example 2:
% consecutiveOnes([0,1,1,1,0,0], 2) -> there are three consecutive 1s and we allow only 2 -> Fail.
% example 3:
% consecutiveOnes([0,1,1,0,0,0], 2) -> there are only two consecutive 1s and we allow 2 -> OK
Как я могу добавить ограничение для счетчика C
с указанием C <= Allowed
в код Пролога выше?