布隆AND在prolog中返回X = true但该函数变为false

时间:2013-12-08 14:01:23

标签: prolog boolean

and_true(true, true).

and_false(false,true).

and_false(true,false).

and_false(false, false).

g_AND(Y,Z,X):- and_true(Y,Z), X=true.
g_AND(Y,Z,X):- and_false(Y,Z), X=false.

唯一的问题是,当我输入g_AND(true,true,X)时,它给了我 X =真; 假

我不希望它返回虚假。你能帮忙吗?

2 个答案:

答案 0 :(得分:0)

通常你试图设置“当一个元素为假时,false变为true”。在你的函数中,g_AND(Y,Z,X)false变为true,因为你的and_false(Y,Z)语句在将false语句赋予其中一个变量后变为true。

尝试使用此代码使'false变为假'

and_true(true, true).

g_and(X,Y,Z):-
    and_true(X,Y),and_true(X,Z).

如果其中一个是假的,那么这个代码就是假的,就像自然的那样。

答案 1 :(得分:0)

g_AND(true,true,X).
X=true ; 
false

false.表示结果用完了。查询and_true(true, true).为真,然后回溯,查找g_AND(true,true,X)将在您的文件中回答为真的其他语句,但它没有找到任何语句,因此返回false。 (在Prolog的某些旧版本中,您可能会得到“是”和“否”)

如果您编辑文件并添加剪辑(!):

g_AND(Y,Z,X):- and_true(Y,Z), X=true, !.

结果只是true.

2 ?- g_AND(true,true,X).
X = true.

因为,在第一个结果之后,程序将停止回溯(它不会搜索其他答案)。