在进入正题之前,我们先一起思考一个问题:当我们在编程时,我们在做什么?
看到这个问题,有些同学可能会第一时间要回答:
- 在听音乐
- 在打字
- 在发呆
- 在装作很忙的样子
- ……
呃,我不是那个意思,说认真的:当我们在编程时,我们在做什么?
我们在把所想的「解决方案」转换成计算机可理解的「计算机语言」。
JavaScript, Python, Java, Ruby, C++ …… 等等等等,哪怕是世界上最好的语言 PHP,也大抵如此: 「解决方案」->「计算机语言」 。
但你有没有想过反过来? 「计算机语言」->「解决方案」 这样,我们使用「计算机语言」描述问题,而计算机来告诉我们「解决方案」?
或许你会想到人工智能、深度学习等等概念,但那些热门话题不是我们今天要讨论的。
今天,我们来一起聊聊那迷人的被遗忘的语言:Prolog.
Prolog 简介
Prolog(Programming in Logic)是一种逻辑编程语言。它创建在逻辑学的理论基础之上, 诞生与 1972 年,最初被运用于自然语言等研究领域,距今 46 年历史。当下火热的 JavaScript 语言 23 岁,年龄刚好是 Prolog 的一半。
说到 Prolog 是一种逻辑编程语言,那么跟一般的函数式语言有什么区别呢?答:完全不是一码事情。在 Prolog 里,最基本的做法是先描述事实(定立对象与对象之间的关系),然后用询问目标的方式来查询各种对象之间的关系,系统会自动进行匹配、回溯,并给出答案。
举个例子:
我们使用下面的语法来表述一个事实
handsome(ergou).
复制代码
这个语句描述了一个事实:二狗 (ergou) 是无比帅气 (handsome) 的,然后以句号 (.) 结束,表明这个事实描述完毕,不容置疑。
然后接下来我们在 Prolog 的控制台 (REPL) 里就会得到如下的结论:
?- handsome(X).
X = ergou.
?-
复制代码
其中
?-
开头的是我们手动输入的,其他的是 Prolog 返回的。上面的那些操作是:
-
我们首先问 Prolog:谁是世界上最帅的人?
handsome(X).
其中X
是大写字母开头,在 Prolog 里所有大写字母开头的都是变量。 -
然后 Prolog 回答说:
X = ergou.
,当然是二狗了!
以上,应该可以算作 Prolog 基本思路的一个演示。你可以去下载适用于你的 Prolog 环境,然后在自己的电脑上把玩一下。