我需要在prolog中生成一个布尔列表。
?- gener_booleans(Xs,3).
Xs = [true, true, true] ;
Xs = [true, true, false] ;
...
Xs = [false, false, false] ;
这是另一个解决方案的链接,但我不知道如何将其应用于布尔值。 Get all sets of list in prolog 有人可以帮忙吗? P.S列表的数量是2 ^ N. 谢谢!
答案 0 :(得分:3)
如果您的Prolog具有maplist
谓词(如SWI和YAP):
booleans(Xs, N) :-
length(Xs, N),
maplist(boolean, Xs).
boolean(true).
boolean(false).
(我重命名了谓词booleans
,因为它也可以检查布尔值;在Prolog中编程时更喜欢声明性名称。)
答案 1 :(得分:1)
gener_booleans([],0).
gener_booleans([true|Xs],N) :- N>0, N1 is N-1, gener_booleans(Xs,N1).
gener_booleans([false|Xs],N) :- N>0, N1 is N-1, gener_booleans(Xs,N1).