prolog 的基本介绍与运用,包括课后作业

###介绍:
这是一门来自圣光机学院的课程,把notion的笔记简单上传了一下。prolog是一门简单的逻辑语言,需要掌握的语法不多且难度不大
我的notion主页https://www.notion.so/fff51c8df7ea81e8a943cb157d43445e?v=fff51c8df7ea8133b931000c7876037c&pvs=4

C1 简单了解机制和规则

创建时间: 2024年9月20日 14:09
语言: Prolog

哈哈,又可以和外教一起学小众冷门语言了,真好。

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).

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值