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 =真; 假
我不希望它返回虚假。你能帮忙吗?
答案 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.
因为,在第一个结果之后,程序将停止回溯(它不会搜索其他答案)。