2011-12-15 132 views
0

如何分别将swi-prolog中的true和false映射到1和0的映射? 我需要评估像true和falses这样的零(例如在真值表中)。 我有一些困难,因为每当我尝试使用1作为逻辑值swi-prolog剂量采取它友好并返回erros。swiprolog map false为零且为true

我想尝试这样

0 :- false. 
1 :- true. 


的东西,当我询问我的逻辑“与”操作,它应该返回逻辑和适用于这两个值操作。

? my_and_operation(1, 0). 
false 

? my_and_operation(1, 1). 
true 

回答

3

简单的方式做你所需要的仅仅是确定一些isTrue/1isFalse/1谓词。

isTrue(1). 
isFalse(0). 

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

用法。

?- booleanAnd(1, 0). 
false. 

?- booleanAnd(1, 1). 
true. 
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). 
0

型的简单方法:

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

(==)/ 2不是单调的:用你的定义,例如查询my_and_operation(X,Y)F AILS尽管显然有解决方案,但确实更具体的查询my_and_operation(1,1)成功。如果可能的话,让程序保持单调性,因为它允许声明性调试和更简单的属性推理,所以将其定义为my_and_operation(1,1)。 – mat 2011-12-16 08:19:46

0

真正简单的解决方案:

my_and_operation(1, 1). 
相关问题