###介绍:
这是一门来自圣光机学院的课程,把notion的笔记简单上传了一下。prolog是一门简单的逻辑语言,需要掌握的语法不多且难度不大
我的notion主页https://www.notion.so/fff51c8df7ea81e8a943cb157d43445e?v=fff51c8df7ea8133b931000c7876037c&pvs=4
C1 简单了解机制和规则
创建时间: 2024年9月20日 14:09
语言: Prolog
哈哈,又可以和外教一起学小众冷门语言了,真好。
参考网址
基本语法!
常量和变量:
小写字母开头的字符串,就是常量;大写字母开头的字符串,就是变量。
abc
Abc
关系和属性:
两个对象之间的关系,使用括号表示。比如,jack 的朋友是 peter,写成friend(jack, peter).
。
注意,两个对象之间的关系是单向的而不是相互的。
当然,friend只是一个人为起的名字,并不代表机器了解这个关系。Prolog是一门逻辑语言,所以要用逻辑语言来看待会更方便理解。
如果括号里面只有一个参数,就表示对象拥有该属性,比如 jack 是男性,写成male(jack).
。
规则:
规则是推理方法,即如何从一个论断得到另一个论断。
friend(X, Y) :- friend(Y,X).
所使用的符号为::-
上面表达式表示为如果右边为true,则左边也为true
如果一条规则取决于多个条件同时为true
,则条件之间使用逗号分隔
mother(X, Y) :- child(Y,X), female(X).
如果一条规则取决于某个条件为false
,则在条件之前加上\+
表示否定。
onesidelove(X, Y) :- loves(X, Y), \+ loves(Y,X).
查询:
使用 ?- 进行查询
listing()
函数可以列出所有的朋友关系。
?- listing(friend).
friend(john, julia).
friend(john, jack).
friend(julia, sam).
friend(julia, molly).
true.
还可以查询john
有多少个朋友。
?- friend(john, Who).
Who = julia ;
Who = jack.
当然,此处的who为变量
课后作业
1.family tree
2.相关代码(其实是随便写的,只要自己定规则和事实就行了,然后用prolog语言去判断是否符合逻辑)
parent(hu_yongchao,shi_xiaoqin).
parent(shi_wang,xiao_hong).
male(hu_yongchao).
male(hu_haonan).
male(hu_jian).
female(zhang_yu).
female(shi_xiaoqin).
family(hu_haonan,hu_yongchao).
family(hu_haonan,shi_xiaoqin).
family(hu_yongchao,zhang_yu).
family(hu_yongchao,hu_jian).
%Events
birth(lei_yi,female,1820,yuan_shitianzun,lei_mu,taishan).
birth(lei_zhui,male,1822,yuan_shitianzun,lei_mu,taishan).
birth(yuan_shikai,male,1823,yuan_shitianzun,lei_mu,taishan).
birth(lei_jun,male,1830,yuan_shitianzun,lei_mu,taishan).
birth(hu_yongchao,male,1910,hu_xianfeng,huang_jinmei,wanshi).
birth(shi_xiaoqin,female,1914,shi_hongguo,da_lishi,shouxiang).
birth(hu_haonan,male,1940,hu_yongchao,shi_xiaoqin,xindeng).
marriage(hu_yongchao,shi_xiaoqin,1930).
%Rules
single(X,_) :- not(marriage(X,_,_)).
issingle(X,When) :- not(marriage(X,_,Year)),When<Year.
father(F,C):- parent(F,C),male(F).
mother(M,C):-parent(M,C),female(M).
gege(X,Y):-birth(X,male,A,F,M,_),
birth(Y,_,B,F,M,_),A<B.
didi(X,Y):-birth(X,male,A,F,M,_),
birth(Y,_,B,F,M,_),A>B.
jiejie(X,Y):-birth(X,female,A,F,M,_),
birth(Y,_,B,F,M,_),A<B.
meimei(X,Y):-birth(X,female,A,F,M,_),
birth(Y,_,B,F,M,_),A>B.
isfather(F,C):-birth(C,_,_,F,_,_).
isyeye(F,C):-isfather(A,C),isfather(F,A).
istaiye(F,C):-isyeye(A,C),isfather(F,A).
ismama(F,C):-birth(C,_,_,_,F,_).
isnainai(F,C):-ismama(A,C),ismama(F,A).
istainai(F,C):-ismama(A,C),isnainai(F,A).
iszibei(F,C):-family(F,C).
issunzibei(F,C):-family(F,A),family(A,C).
iszengsunbei(F,C):-family(F,A),family(A,B),family(B,C).
iserzi(F,C):-iszibei(F,C),male(F).
isnver(F,C):-iszibei(F,C),female(F).
issunzi(F,C):-issunzibei(F,C),male(F).
issunnv(F,C):-issunzibei(F,C),female(F).
iszengsunzi(F,C):-iszengsunbei(F,C),male(F).
iszengsunnv(F,C):-iszengsunbei(F,C),female(F).