如果列表中的数字exactly/2恰好等于 1 ,我编写了以下谓词:NL
:- 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.