Найти количество успехов из списка условий / целей - PullRequest
0 голосов
/ 18 марта 2020

Я написал следующий предикат exactly/2, который завершается успешно, если ровно N чисел в списке L равны 1:

:- pred exactly(int, list(int)).
:- mode exactly(in, in) is semidet.
:- mode exactly(out, in) is det.
exactly(N, L) :-
    length(filter(pred(X::in) is semidet :- (X = 1), L), N).

Например, вызов exactly(X, [1, 0, 0, 1, 0, 1]) свяжет X с 3.

Я хочу создать нечто подобное, но для предикатов: я хочу написать предикат, который будет успешным, если ровно N цели из списка L успешны.

Например, вызов exactly(X, [true, false, member(1, [1, 2, 3]), member(0, [1, 2, 3])]) должен связать X с 2.

...