Swi-Prolog学习笔记(入门篇)
首先介绍一个学习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
Swi-Prolog学习笔记(入门篇)相关推荐
- Vue学习笔记入门篇——数据及DOM
本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...
- C# 学习笔记入门篇(上)
文章目录 C# 学习笔记入门篇 〇.写在前面 Hello World! 这篇学习笔记适合什么人 这篇学习笔记到底想记什么 附加说明 一.命名空间 "进入"命名空间 嵌套的命名空间. ...
- R语言学习笔记——入门篇:第一章-R语言介绍
R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...
- R语言学习笔记——入门篇:第三章-图形初阶
R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...
- 易语言学习笔记——入门篇
易语言学习笔记20180709 最早接触易语言是三年前的事情了,那时候是因为DNF这个游戏我才知道了易语言这个编程语言,当时对他就非常的憧憬.只不过那时候易语言的学习资源比较少,而且自身的学业比较重就 ...
- Docker学习笔记-入门篇
文章目录 Docker概述 Docker为什么会出现 Docker的历史 Docker为什么这么火(有什么优势) Docker是什么 Docker能做什么 Docker的基本组成 Docker为什么比 ...
- JavaScript学习笔记 - 入门篇(1)- 准备
为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript. 目前,全世界大部分网页都使用JavaScript. 它可以让网页 ...
- zabbix学习笔记——入门篇
目录 一.了解监控 监控的种类 二.zabbix监控 1.介绍zabbix 2.为什么选择zabbix 3.Zabbix可监控对象 4.zabbix监控方式 1.被动监控 2.主动监控 5.zabbi ...
- GeneXus学习笔记——入门篇
使用GeneXus做开发做了有一段时间了 却发现一个问题(O_O)?就是除了相关的Wiki外 网上其他地方的相关资料都很少 于是乎我就想在这记录一些东西 来帮助以后会用到的人(°ー°") 那 ...
- android学习笔记(入门篇)
+号只是当你第一次定义一个资源ID的时候需要, 告诉SDK此资源ID需要被创建出来 对于所有的View默认的权重是0,如果你只设置了一个View的权重大于0,那么这个View将占据除去别的View本身 ...
最新文章
- CALayer-层的属性
- 按钮在执行frame动画的时候怎么响应触发事件?
- C#語法學習線程(Thread)
- 数据结构与算法之冒泡排序
- pyspark启动时卡住了
- c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf
- java中输出进程的映像名称,怎么修改tomcat进程的名称(windows)
- 11月20日站立会议
- 深入学习golang—channel
- 调试内核Ubuntu 搭建嵌入式开发环境-续
- JSON的C代码示例
- 7-2 数列循环右移 (10 分)
- 地图之美(地图制图)
- phpredis中文手册
- 非法集资(Illegal Fund-raising)
- Android开关按键(左右复选)
- linux服务完整吗,全面服务fullservice完整版
- Unity中的特殊的文件夹
- 2021年危险化学品经营单位主要负责人考试试卷及危险化学品经营单位主要负责人模拟考试
- 软件工程——四则运算2