当前位置: 首页 > 工具软件 > SWI-Prolog > 使用案例 >

Swi-Prolog学习笔记(入门篇)

柴耀
2023-12-01

首先介绍一个学习swi-prolog 和amzi-prolog很靠谱的中文网站:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin.html

然后介绍一下我在学习时发现的prolog和其他编程语言的不同之处。

prolog是逻辑编程语言,在解决逻辑推理问题是有很明显的优势。

它的解决问题的策略是基于枚举法的,所以返回结果很可能不唯一。

进行prolog编程时重要的是把问题描述清楚,这样才能得到一个有效的解决方案。

swi-prolog和amzi-prolog是prolog语言的两种实现。(我认为挺好用的,可以从官网下载)。

swi-prolog:http://www.swi-prolog.org/download/stable

amzi-prolog:http://www.amzi.com/AmziOpenSource/downloads.php

最后开始我的学习笔记。

1 prolog 参数类型

   整数: 绝对值小于某一个数的正数或负数。

   原子: 通常是字母和数字组成,开头的字符必须是小写字母。例如:  'hello tt'  hello

   变量: 由大写字母或下划线_开头。例如:X  _x

   结构: 例如列表[A|B], [  ].

2  数据类型

    整形,浮点型,字符串

3  简单的语法部分

    知识表达:

    %寻找Nani
    room(kitchen).  %%知识表达---原子
    room(office).
    room(hall).
    room('dining room').
    room(cellar).

    location(desk,office).                %%知识表达---结构
    location(apple,kitchen).
    location(flashlight,desk).
    location('washing machine',cellar).
    location(nani,'washing machine').
    location(broccoli,kitchen).
    location(crackers,kitchen).
    location(computer,office).


    door(office,hall).
    door(kitchen,office).
    door(hall,'dinning room').
    door(kitchen,cellar).
    door('dinning room',kitchen).


    edible(apple).
    edible(crackers).
    tastes_yucky(broccoli).


    turned_off(flashlight).
    here(kithen).
    where_food(X,Y):-location(X,Y),edible(X).              %%知识表达----谓词(重点)
    list_things(Place):-location(X,Place),tab(2),write(X),nl,fail.

    以上为知识库的内容用NotePad以XX.pl的形式保存起来,运行swiprolog里的consult命令,然后就可以对知识库进行提问了。

    询问语句

    简单查询

    ?- room(X).                                     %单变量

    ?-location(Thing, kitchen).          %固定一个变量

    ?- location(Thing, Place).            %两个变量

    关联查询

    ?- location(X, kitchen), edible(X).    %厨房里有什么是可以吃的

    ?- door(kitchen,R),location(T,R).      %和厨房相连的房间里有什么

    运用内部的函数查询

    ?- location(X,kitchen),write(X),nl,fail. 

    %write()    %显示查询结果
    %nl         %换行,输出一个回车键

     注意
    Prolog子句中的变量全部都是局部变量
    Prolog中没有全局变量
    asserts和retracts就是控制这些全局数据的工具
    Prolog的变量是没有数据类型之分的

    先到这里,关于列表,内置谓词,数值计算,控制语句,操作符的内容,我们下一篇再介绍

    文章主要参考:http://hyry.dip.jp/tech/book/page/prolog/search_game_maxmin.html


  

 类似资料: