引导程序系列:学习Prolog(第一部分)

ZDNet软件频道 时间:2006-11-30 作者:Builder.com.cn |  我要评论()
本文关键词:引导程序 PaulAyre Prolog
本周我们来讨论Prolog——一门说明性语言。它之所以有趣是因为它工作的方式与大多数流行的编程语言完全不同。

本文是介绍不被人们经常使用的一些语言的系列文章的第一篇。

本周我们来讨论Prolog——一门说明性语言。它之所以有趣是因为它工作的方式与大多数流行的编程语言完全不同。比较流行的常见语言一般分为这么几类:

过程语言:
C
VB 6.0

面向对象语言:
C# .Net
VB .Net
Java
Python

功能型语言:
Haskell

说明性语言:
Prolog

说明性语言是一种你来陈述事实,以及这些事实之间相互关系的语言。Prolog与Formal Logic在结构上更为接近。因此那些以前接触过FOL的人可能会对它的句法感到更加适应。程序人员会发现在同一类语言之间(比如VB .Net和C# .Net——它们事实上是没有区别的)转换会更容易一些,但是跨了类就没有那么容易了。这就是为什么习惯过程语言或者面向对象语言的人转到功能型语言会比较困难的原因。

dog(rover).

上面是一个Prolog语句的示例。对于大多数人来说,这就像一个没有写完的函数声明。嗯,你的看法部分是对的。它是一个对事实的声明——而不是一个函数。在本文里,“dog”是一种关系,“rover”是一个原子。原子要比名字所代表的内容稍多。它不是一个整数,也不是一个字符串或者一个类。它没有属性,没有类型。它只是一个没有任何实体的名字。这是你心里要记住的最重要的事情。重要的是这些原子相互之间的关系是什么样的。

要注意的一点是在Prolog里所有的原子都必须以小写字母开头,这一点很有用。

如果没有别的内容进行意义上的关联,一个原子没有真正的意义。在上面的例子里,“dog”这个关系(relatioonship)包围在原子“rover”周围。所以这个例子可以被解读为“rover是一条狗(rover is a dog)”,这与Formal Logic里的谓词很相像。它不知道狗是什么,它也没法知道——你作为程序员喜欢它是什么就是什么。

parent(john, kate).
parent(joan, kate).

female(joan).
female(kate).
male(john).

这个代码引入了另外一个关系,这一次带有两个参数。这意味着它是一种带有两个参数的关系(两个参数——很简单?不。)除了上面看到的,这些关系背后没有代码。大多数程序员会很奇怪地发现“父母(parent)”的定义,但是你却没有看到。它不需要定义。上面这几个语句是一个绝对完整的Prolog应用程序。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134