gpt4 book ai didi

prolog - Prolog 中的复合 boolean 表达式

转载 作者:行者123 更新时间:2023-12-03 09:45:19 25 4
gpt4 key购买 nike

在 Prolog 中,如何实现复合逻辑谓词,如 (A 和 B) 或 (C 和 D)?

这似乎是一个简单的问题,但许多平易近人的在线教程对 boolean 表达式不够详细。我假设你不能只写:

test(A, B, C, D) :- cond(A), cond(B); cond(C), cond(D).

那么你会怎么做呢?

最佳答案

正如其他人所指出的,您的原始示例

test(A, B, C, D) :- cond(A), cond(B); cond(C), cond(D).

是完全有效的(假设解析如您所愿)。你没试过吗?

入门

逻辑与
foo :- a , b .

逻辑或
foo :- a ; b .

结合
foo :- a , b ; c , d .

上面解析为:
foo :- ( a , b ) ; ( c , d ) .

使用括号表示不同的所需绑定(bind):
foo :- a , ( b ; c ) , d .

更好的是,避开 ; OR 运算符并将备选方案分解为单独的子句。对于人们来说,顺序比分支树结构更容易理解。将交替分解为多个子句可简化测试/调试并提高理解力。因此,更喜欢
foo :- a , b .
foo :- c , d .

超过
foo :- a , b ; c , d .

并且更喜欢
foo :- a , bar , d .

bar :- b .
bar :- c .

超过
foo :- a , ( b ; c ) , d .

可能最重要的是,像这样将事情分解成多个子句使以后的维护更容易。具有如下结构:
foo :- a , b ; c , d .

当您添加另一个案例时,您会怎么做?当它扩展到 50 种替代品时呢?

每个额外的备选方案都会增加通过子句的代码路径数量,从而使测试和理解更加困难。为了在测试中获得完整的代码覆盖率,必须单独测试许多替代路径。

具有等效结构
foo :- a , b .
foo :- c , d .

添加备选方案只是添加附加条款或条款的问题,每个条款都可以单独测试。

一个专业的程序员首先为那些几年后需要理解、更改和修复该代码的人编写代码( 提示: 那个人可能就是你自己)。

关于prolog - Prolog 中的复合 boolean 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951321/

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