prolog程序各条语句描述

prolog程序各条语句描述,第1张

只是大略的说明,要想知道更详细的东西,可以搜索相应的关键词或者查询专业资料

----------------------------------------

% 域说明

% 指定类型,前两个为符号(symbol),后一个为整数(integer)

domains

name=symbol.

sex=symbol.

age=integer.

% 谓词说明

% 括号内为相应的参数

% 以person为例,通俗的说人有三个属性,姓名name,性别sex

% 年龄age。

% 而mother有两个参数——两个名字

predicates

person(name,sex,age)

mother(name,name)

father(name,name)

uncle(name,name)

aunt(name,name)

grandfather(name,name)

grandmother(name,name)

% 目标说明

% 以第一组为例,名字1是名字2的叔叔,那么就输出一条信息(write)

% 注意逗号“,”是逻辑上的and

goal

uncle(Name1,Name2),

write(Name1," is",Name2,"'s uncle!\n "),

aunt(Name3,Name4),

write(Name3," is",Name4,"'s aunt!\n "),

grandfather(Name5,Name6),

write(Name5,"is ",Name6,"'s grandfather!\n "),

grandmother(Name7,Name8),

write(Name7,"is ",Name8,"'s grandmother!\n ").

% 子句集

% 以第一个为例,陈述了一个事实:

% 有一个人,他的名字的是a,性别是男m(man),年龄是21

% 而mother(e, a)则陈述了这样一个事实,e是a的妈妈mother

% 其它的类似

clauses

person(a,m,21).

person(b,m,22).

person(c,w,23).

person(d,w,24).

mother(e,a).

mother(e,b).

mother(e,c).

mother(e,d).

mother(c,f).

father(a,g).

father(g,h).

% 叔叔的定义,这是规则

% 谓词predicate包括两种,fact和rule,事实就是上面那种,

% 规则就是下面这种

% 简单的说,如果有Name1,Name2是人person,并且具有共同的

% 母亲Z,并且Name1比Name2的年龄大Age1>Age2,那么Name1

% 就是Name2的叔叔uncle

% rule由三部分组成,:-为连接符,一般读作if,连接符前边的部分为head

% 后面的部分为body。

uncle(Name1,Name2):-

person(Name1,m,Age1),

person(Name2,m,Age2),

mother(Z,Name1),

mother(Z,Name2),

Age1>Age2.

aunt(Name3,Name4):-

person(Name3,w,Age3),

person(Name4,w,Age4),

mother(Z,Name3),

mother(Z,Name4),

Age3>Age4.

grandfather(Name1,Name2):-

father(Name1,Y),

father(Y,Name2).

grandmother(Name7,Name8):-

mother(Name7,X),

mother(X,Name8).

第一个用Prolog写其实很简单,不过我不记得怎么写了,只好用C++。

#include<iostream>

using namespace std

int fun1(int a,int b){

return a|b

}

int fun2(int a,int e,int f){

return (a&e&~f)|(a&~e&f)|(~a&e&f)

}

int fun3(int b,int c){

return ~(b^c)

}

int fun4(int a,int d){

return a^d

}

int fun5(int c,int d){

return c^d

}

int fun6(int d,int e){

return ~d|e

}

void output(int a,int b,int c,int d,int e,int f){

if(a) cout<<"A "

if(b) cout<<"B "

if(c) cout<<"C "

if(d) cout<<"D "

if(e) cout<<"E "

if(f) cout<<"F "

cout<<endl

}

int main(){

for(int a=0a<2a++)

for(int b=0b<2b++)

for(int c=0c<2c++)

for(int d=0d<2d++)

for(int e=0e<2e++)

for(int f=0f<2f++)

if(fun1(a,d)&fun2(a,e,f)&fun3(b,c)&fun4(a,d)&fun5(c,d)&fun6(d,e)) output(a,b,c,d,e,f)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8068512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存