在prolog中生成一组布尔列表

时间:2012-04-29 15:39:54

标签: list prolog

我需要在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. 谢谢!

2 个答案:

答案 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).