一、实验目的
- 熟悉PROLOG的运行环境,进行PROLOG的基本编程练习;
了解PROLOG语言中常量、变量的表示方法。PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。 - 求解图搜索问题。
任选一个以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、农夫过河问题、传教士与野人问题。
二、实验的硬件、软件平台
硬件:计算机
软件:操作系统:WINDOWS/Linux
应用软件:Prolog
三、实验内容及步骤
熟悉prolog语言的使用并实现求解图搜索问题
实验步骤:
1:安装prolog集成开发环境
2:采用prolog编写所选问题的源程序
3:编译程序,输出查询问题的结果或数据
实验过程
推荐看prolog基础了解prolog
安装prolog(Ubuntu)
$ sudo apt-get install swi-prolog
如何启动
命令行键入以下两个命令其中一个都可以
$ swipl
$ prolog
用prolog解决汉诺塔问题
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?
把N个盘子从a柱子移动到c柱子,递归分三步
- 把上面N-1个盘子从a柱子移动到b柱子
- 把最下面一个盘子从a柱子移动到c柱子
- 把第一步中N-1个盘子从b柱子移动到c柱子
最后编写代码如下(相对简单):
hanoi(N) :- write('求解的问题:移动'),write(N),write('个盘子从a柱子到c柱子'),nl,write('移动过程如下:'),nl,
Cnt is 2^N-1,
move(N,a,b,c),
write('共需要'),write(Cnt),write('步').
move(0,_,_,_) :- !.
move(N,A,B,C) :-
M is N-1,
move(M,A,C,B),
inform(A,B),
move(M,C,B,A).
inform(X,Y) :- write('Move a disk from '), write(X), write(' to '), write(Y), write('.'), nl.
solve:-
write('输入移动的盘子数量:'),nl,
read(N),nl,
hanoi(N).
运行如下:
总结
这门语言语法简单,专门用来搞推理用的,挺有意思的。