• Learn Prolog Now 翻译


    练习题 1.1 下面的字符序列哪些是原子,哪些是变量,哪些两者都不是?

     

     1. vINCENT

     2. Footmassage

     3. variable23

     4. Variable2000

     5. big_kahuna_burger

     6. 'big kahuna burger'

     7. big kahuna burger

     8. 'Jules'

     9. _Jules

     10. '_Jules'

     我的答案:

     vINCENT,variable23,big_kahuna_burger,'big kahuna burger','Jules','_Jules'是原子;

     Footmassage,Variable2000是变量;

     big kahuna burger两者都不是

    练习题 1.2 下面的字符序列中哪些是原子,哪些是变量,哪些是复杂语句,哪些什么都不是?给出每个复杂语句的函子和元数。

     

     1. loves(Vincent, mia)

     2. 'loves(Vincent, mia)'

     3. Butch(boxer)

     4. boxer(Butch)

     5. and(big(burger), kahuna(burger))

     6. and(big(X), kahuna(X))

     7. _and(big(X), kahuna(X))

     8. (Butch kills Vincent)

     9. kills(Butch Vincent)

     10. kills(Butch, Vincent

     我的答案:

     'loves(Vincent, mia)'是原子;

     没有变量;

     复杂语句有:

      loves(Vincent, mia),函子是loves,元数是2;

      boxer(Butch),函子是boxer,元数是1;

      and(big(burger), kahuna(burger)),函子是and,元数是2;

      and(big(X), kahuna(X)),函子是and,元数是2;

     什么都不是的包括:Butch(boxer),_and(big(X), kahuna(X)),(Butch kills Vincent),kills(Butch Vincent),kills(Butch, Vincent。

    练习题 1.3 在下面的知识库中,事实,规则,子句和谓词分别有多少个?哪些是规则的头部,哪些是对应的目标?

     woman(vincent).

     woman(mia).

     man(jules).

     person(X) :- man(X); woman(X).

     loves(X, Y) :- father(X, Y).

     father(Y, Z) :- man(Y), son(Z, Y).

     father(Y, Z) :- man(Y), daughter(Z, Y).

     我的答案:

     事实一共有3个,它们是:

      woman(vincent).

      woman(mia).

      man(jules).

     规则一共有4个,它们是:

      person(X) :- man(X); woman(X).

      loves(X, Y) :- father(X, Y).

      father(Y, Z) :- man(Y), son(Z, Y).

      father(Y, Z) :- man(Y), daughter(Z, Y).

     子句一共有7个,它们是:

      man(X),woman(X),father(X, Y),man(Y),son(Z, Y),man(Y),daughter(Z, Y)

     谓词一共有7个,他们是:

      woman,man,person,loves,father,son,daughter;

     规则的头部和其包含的目标如下:

    头部 包含的目标
    person(X) man(X); Woman(X)
    loves(X, Y) father(X, Y)
    father(Y, Z) man(Y), son(Z, Y)
    father(Y, Z) man(Y), daughter(Z, Y)

     

     

     

     

     

     

    练习题 1.4 在Prolog中表达以下的逻辑

     

     1. Butch is a killer

     2. Mia and Marsellus are married

     3. Zed is dead.

     4. Marsellus kills everyone who gives Mia a footmassage.

     5. Mia loves everyone who is a good dancer.

     6. Jules eats anything that is nutritious or tasty.

     

     我的答案:

     1. killer(butch).

     2. married(mia, marsellus).

     3. dead(zed).

     4. kills(marsellus, X) :- footmassage(X, mia).

     5. loves(mia, X) :- good_dancer(X).

     6. eats(jules, X) :- nutritious(X); tasty(X).

     

     两点个人总结:

     1. 如果要将现实中的逻辑或者信息使用Prolog的形式表达,那么函子可能会是动词、名字和形容词,而参数应该是名词或者复杂语句。

     2. 函子、参数序列及其实现组成的谓词逻辑,这个和传统意义上的函数或者方法是有本质区别的:函数和方式有执行过程,有输入和输出;谓词只是知识库中事实和规则的存储方式,

    通过查询起作用,其本身是没有副作用的。

     

    练习题 1.5 假设我们有如下的知识库:

     

     wizard(ron).

     hasWand(harry).

     quidditchPlayer(harry).

     wizard(X) :- hasBroom(X), hasWand(X).

     hasBroom(X) :- quidditchPlayer(X).

     

     Prolog会针对下面的查询做出怎么样的回答?

     1. wizard(ron).

     2. witch(ron).

     3. wizard(hermione).

     4. witch(hermione).

     5. wizard(harry).

     6. wizard(Y).

     7. witch(Y).

     

     我的答案:

     1. Prolog会回答true,因为这是知识库中直接定义的事实。

     2. Prolog会报错,因为知识库中没有定义关于witch的任何事实和规则。

     3. Prolog会回答false,因为没有直接定义该事实,也不能通过间接推导得出。

     4. Prolog会报错,原因同2。

     5. Prolog会回答true,因为该事实可以通过间接推导得出。

     6. Prolog会回答:Y = ron; Y = harry。

     7. Prolog会报错,原则同2。

  • 相关阅读:
    使用OpenSSL自建CA + Nginx配置HTTPS
    Windows安装pycrypto失败记录
    在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况
    计算机类学术论文 28个常见出版社一般写法(参考文献用)
    自然语言处理的CNN模型中几种常见的池化方法
    自然语言处理相关项目列表(2018/02/05更新)
    【原创】python嗅探QQ消息实战
    pynlpir 报错 Cannot Save user dictionary 原因与解决方法
    开发文档之 概要设计说明书 详细设计说明书 数据库设计说明书
    爬取大众点评美食频道店铺信息实践
  • 原文地址:https://www.cnblogs.com/seaman-h-zhang/p/4603010.html
Copyright © 2020-2023  润新知