内容正文:
用Prolog求解简单问题
1
基本算术运算
加减、乘除是基本算术运算能不能用Prolog求解算术问题呢?答案是肯定的。Turbo Prolog不仅提供了加减乘除四种运算,还提供了取模运算。运算符号依次为 + - * /和mod,我们可以利用这些运算符进行数值计算。
例:从键盘输入两个整数,用X和Y表示,分别求出X+Y、X-Y、X*Y和X/Y的值。
3
程序如下:
goal
readint(X), /*从键盘上读取一个整数,然后约束给变量X*/
readint(Y),
Z1=X+Y, /*求两个整数的和*/
write(X,"+",Y,"=",Z1),nl, /*将所求的和显示在屏幕上*/
Z2=X-Y,
write(X,"-",Y,"=",Z1),nl,
Z3=X*Y,
write(X,"*",Y,"=",Z1),nl,
Z4=X/Y,
write(X,"/",Y,"=",Z1),nl.
4
在程序中,我们用到了内部谓词readint(X),功能是从键盘上读取一个整数,然后约束给变量X。还有内部谓词write(X1,X2…Xn),功能是把Xi(i=1,2,…,n)的值显示在屏幕上。
运行此程序,结果如图所示。
5
2
递归
1.递归的定义
首先请大家分析下面的程序,这个程序的功能是什么?此程序的规则有什么特点?
domains
C=char
predicates
read_one_char.
goal
read_one_char.
clauses
read_one_char:-readchar(C).
write(C)
read_one_char.
7
2.汉诺塔(Hanoi)问题求解
(1)问题描述。相传古代东方有一座寺庙,庙内有三根座桩,第一根本桩上叠有一摞64个中心带孔、从上到下直径自小到大各不相同的圆盘片。这些圆盘片叠成塔状,即越上面的盘片直径越小。要把这64个盘片从第一根座桩搬到第三根座桩上(如图),搬动的规则如下