逻辑与代码 1

这篇博客介绍了如何在Prolog中实现逻辑表达式的真值表,包括and、or、nand、nor、xor、impl和equ等逻辑运算,并提供了具体的代码示例和查询演示,展示了如何通过table/3谓词打印给定逻辑表达式的真值表。
摘要由CSDN通过智能技术生成

转载自:https://mp.weixin.qq.com/s/kSCgQlrJw4h_tGW_MpFJBQ

1、逻辑表达式的真值表(1)

定义谓词and/2, or/2, nand/2, nor/2, xor/2, impl/2 and equ/2 (用于逻辑等价),这些谓词根据各自的运算结果而成功或失败;例如,且仅当A和B都成功时,and(A,B)才会成功。请注意,A和B可以成为Prolog目标(不仅是常数true和fail)。

然后,可以使用前缀表示法编写两个变量中的逻辑表达式,如以下示例所示:and(or(A,B),nand(A,B)).

 

and(A,B) :-      %与关系

AB.        %A,B只要有其中一个为fail则为fail

 

or(A,_) :-         %或关系

A.            %A,B有一个为true则为true

or(_,B) :- 

B.

 

equ(A,B) :-     %A,B相同则为true

or(and(A,B), and(not(A),not(B))). 

 

xor(A,B) :-                  %异或关系

not(equ(A,B)).    %A,B不同则为true

 

nor(A,B) :-                  %或非关系

not(or(A,B)).      %A,B都为fail则为true

 

nand(A,B) :-               %A,B都为true则为fail

not(and(A,B)).   %A,B只要其中一个为fail则为true

 

impl(A,B) :-                %A,B只有当A为trueB为fail时为fail

or(not(A),B).

 

% bind(X) :- 依次实例化X为真和假

 

bind(true).

bind(fail).

 

table(A,B,Expr) :- 

bind(A), 

bind(B), 

do(A,B,Expr), 

fail.                     %强制失败

 

do(A,B,_) :- 

write(A), 

write('  '), 

write(B), 

write('  '), 

fail.                     %强制失败,去匹配do的下一个子句

do(_,_,Expr) :- 

Expr

!,                         %截断,组织回溯

write(true), 

nl.

do(_,_,<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值