【人工智能实验】Lab2 Prolog编程求解图搜索问题

一、实验目的

  1. 熟悉PROLOG的运行环境,进行PROLOG的基本编程练习;
    了解PROLOG语言中常量、变量的表示方法。PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。
  2. 求解图搜索问题。
    任选一个以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、农夫过河问题、传教士与野人问题。

二、实验的硬件、软件平台

硬件:计算机
  软件:操作系统: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).  

运行如下:

在这里插入图片描述

总结

这门语言语法简单,专门用来搞推理用的,挺有意思的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值