swiprolog map false为零且为true

时间:2011-12-15 19:32:18

标签: prolog logic

我如何将swi-prolog中的true和false分别映射到1和0? 我需要评估像真和假的那样的零和零(就像在真值表中一样)。 我遇到了一些困难,因为每当我尝试使用1作为逻辑值时,swi-prolog就会把它当作善意并返回错误。

我想尝试这样的事情

0 :- false.
1 :- true.


当我查询逻辑“和”操作时,它应该返回应用于这两个值的逻辑和操作。

? my_and_operation(1, 0).
false

? my_and_operation(1, 1).
true

4 个答案:

答案 0 :(得分:3)

完成所需操作的简单方法就是确定一些isTrue/1isFalse/1谓词。

isTrue( 1 ).
isFalse( 0 ).

booleanAnd( X, Y ) :-
    isTrue( X ),
    isTrue( Y ).

使用。

?- booleanAnd( 1, 0 ).
false.

?- booleanAnd( 1, 1 ).
true.

答案 1 :(得分:1)

或者你也可以这样做:

map(1, true).
map(0, false).

boolAnd(X, Y) :-
    maplist(map, [X, Y], [A, B]),
    (A, B).

boolOr(X, Y) :-
    maplist(map, [X, Y], [A, B]),
    (A; B).

答案 2 :(得分:0)

更简单的方法:

my_and_operation(X, Y) :-
 X == 1, Y == 1.

答案 3 :(得分:0)

真正简单的解决方案:

my_and_operation(1, 1).