gpt4 book ai didi

Prolog bool 方程求解

转载 作者:行者123 更新时间:2023-12-02 08:31:57 25 4
gpt4 key购买 nike

到目前为止,我已经让这个程序在 GNU prolog 中运行

not(X) :- \+ X.  
and(X, Y):- X , Y.
or(X, Y):- X ; Y.
implies(X, Y):- \+ X ; Y.

p.
q.

:- initialization(main).

main :-
write('Program start'), nl.

你可以输入 and(p,q) 得到 yes,也可以输入 and(p,not(q)) 得到 no。现在我想做这样的事情:

我将 p 设置为 true,(通过用 p. 对其进行初始化),并将 (and(p,q)) 设置为 true(但没有初始化 q),我希望序言说:存在一种解决方案:“q”必须为真

如果我将 p 和 (or(p,q)) 设置为 true 我希望 prolog 说:存在两种解决方案,“q”可以是真或假。哪种方法最好?

最佳答案

我建议您使用变量代替 pq 并将其包装在某个术语中,例如

and(prop(P),prop(Q))

此外,我将实现两个谓词,一个用于解决真陈述,一个用于解决假陈述。使用 \+ 不是正确的方法,因为它不允许您绑定(bind)变量。下面是一些示例代码:

formula_true(prop(true)).
formula_true(and(A,B)) :- formula_true(A),formula_true(B).
formula_true(not(A)) :- formula_false(A).
...

formula_false(prop(false)).
formula_false(and(A,B)) :- formula_false(A);formula_false(B).
...

您的示例查询将是:

P=true,formula_true(and(prop(P),prop(Q))).

也许你的名字比 formula_true 更好。 公式错误。 :)

如果您有一个 bool 约束求解器,那当然会更有效率。

关于Prolog bool 方程求解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com