prolog程序

用大写字母代表未知的事物

 

love(zhangxueyou,wangfei).
love(zhangxueyou,zouhuimin).
love(wangfei,xietinfeng).
love(zouhuimin,zhangxueyou).
love(xietinfeng,wangfei).
love(xietinfeng,zouhuimin).
love(liudehua,zouhuimin).
lovers(X,Y):-love(X,Y),love(Y,X).

我们可以看出来,完整的prolog程序是有事实和规则组成的。事实用来储存一些数据,而规则用来储存某种可以推理出来的关系。

如果把上面的程序调入prolog解释器(关于prolog解释器,在后面有介绍)然后就可以对以上的程序进行询问。

prolog解释器的提示符号为“?-”,你只需要在在这个提示符后面输入自己的句子就可以了。让我们来看第一个询问:

?-love(zhangxueyou,wangfei).

事实上我们的询问完全和程序中的第一条事实一样,这个询问是“是非”询问,也就是说电脑回答的答案是yes或者no。上面的询问的含义是:就你所知,张学友爱王菲么?由于我们的程序中间有这样的事实,所以解释器将回答。

yes.

如果我们问:

?-love(zhangxueyou,liudehua).

解释器将回答

no.

因为它没有发现love(zhangxueyou,liudehua).这个事实。

在询问中我们可以使用大写字母代表未知的事物,让解释器找到答案。例如:

?-love(zhangxueyou,X).

这句话询问的是:张学友都喜欢那些人。解释器将给出答案:

X=wangfei;
X=zouhuimin;
no.

注意1:上面的两个“;”是人工输入的,当解释器找到一个答案之后,它将这个答案输出,并且等待用户的进一步输入,如果用户输入“;”,解释器将继续寻找其他的答案,如果输入的是别的符号,解释器将终止查询。

最后那个no.是因为,系统在输出了zouhuimin这个答案以后,用户输入“;”,表示还想知道其他的答案,而解释器又找不到其他的答案了,于是输出no.来终止查询。我们再看一个例子:

?-love(X,zouhuimin).
X=zhangxueyou;
X=xietinfen;
X=liudehua;
no.

在上面的询问中,我们只涉及到对事实的查询,下面我们来看规则的用法。

?- lovers(X,Y).
X = zhangxueyou
Y = zouhuimin ;

X = wanfei
Y = xietinfen ;

X = zouhuimin
Y = zhangxueyou ;

X = xietinfen
Y = wanfei ;

no

我们看到lovers(X,Y).找出了系统中所有的恋人。不过每对恋人被显示了两次,这是因为prolog是考虑顺序的,也就是说lovers(a,b).和lovers(b,a).并不等价。这一点在后面的学习中,你会了解。

再看一个例子:

?- lovers(wanfei,Y).
Y = xietinfen ;
no

询问王菲的恋人,结果是xietinfen。呵呵,还挺聪明的。我们看到同样是lovers,根据其参数不同,功能也不同,这也是prolog的一个大特点。

最后让我们编写一个寻找情敌的规则来结束这一节内容吧。

rival_in_love(X,Y):-love(X,Z),not(love(Z,X)),love(Z,Y).

这段程序可以理解为:Y是X的情敌的条件是:X喜欢Z(代表某个人),而Z不喜欢X,而Y是Z喜欢的人。哈哈,这不正是情敌的条件嘛。

?- rival_in_love(X,Y).
X = zhangxueyou
Y = xietinfen ;

X = xietinfen
Y = zhangxueyou ;

X = liudehua
Y = zhangxueyou ;

no
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值