不一样的“人工智能语言”Prolog

本文介绍了上古人工智能语言Prolog在TIOBE排行榜上的回归,并探讨了其作为第五代编程语言的独特性。Prolog是一种逻辑编程语言,强调事实、规则和查询,通过SWI-Prolog实现进行介绍。文章通过实例展示了如何定义事实、规则,以及如何进行查询,引导读者入门Prolog。
摘要由CSDN通过智能技术生成

刚发布的八月份的 TIOBE 排行榜前 20,赫然出现了上古人工智能语言 Prolog!

TIOBE 说到:“And, even more astonishing, we see Prolog re-entering the top 20 after 15 years… making an unexpected comeback.”

TIOBE Index for August 2021

(图片来自 TIOBE Index for August 2021)

时隔十余年,这个独特的语言居然又出现在了大家眼前,排名仅次于 Go!还不快学起来!

如果你学不动了,就请跟上我的脚步,今天,我们从一个清新脱俗的例子出发,领略这门不一样的“人工智能语言”。

Prolog

like(mercury, kathy).        % mercury 喜欢 kathy。
like(kathy, mercury).        % kathy 喜欢 mercury。

lover(X, Y) :- like(X, Y), like(Y, X).        % 如果X喜欢Y,且Y也喜欢X,则X与Y是恋人。


询问mercury和谁是恋人:lover(mercury, Who).
电脑告诉我 Who = kathy,

这就是Prolog!

(这段文字取自一个如今犹在的上古网站 Prolog 人工智能语言中文论坛 首页的一个醒目位置)

这是一首发人深思的好诗!但你可能很难想象这居然是一种「编程语言」。

回顾编程语言的发展,有可以分为几个时期。

  • 第一代编程语言:机器语言,用 0 和 1 写代码(焊武帝同学为我们展现的失传已久的神技)。
  • 第二代编程语言:汇编语言
  • 第三代编程语言:高级语言,代表作 C,Java,C++,C#
    • 3.5 GL:晚期的第三代,如 Python、Lisp1,抽象程度更高,已经有了第四代的影子。
  • 第四代编程语言:抽象程度更高,更不用处理和硬件相关的细节,专注描述问题、解决问题,如 SQL,MATLAB

可能小伙伴们对编程语言的了解就止步这里了。但其实我们在几十年前就已经有了——

  • 第五代编程语言:人工智能语言,这一代编程语言期望计算机能自动求解问题,基于问题所给定的某些限制,交由程序来处理而不需以程序员再投入人力开发程序。

今天说「人工智能」你肯定想到 Python,但 Python 并不是第五代的人工智能语言。而 Prolog 就是这种没落十余年的第五代编程语言之一。

今天我们的重点不是谈为什么第五代编程语言集体没落,而是来学习这种上古语言 Prolog。

Prolog

Prolog 这个词来自 PROgramming of LOGic,也就是逻辑编程的意思。Prolog 不需要你编写程序运行过程,你只要给出事实和规则,它会自动分析其中的逻辑关系。然后你就可以通过查询,让 Prolog 完成复杂的逻辑运算。

SWI-Prolog

Prolog 有非常多的实现,维基百科甚至专门有个词条比较不同的 Prolog 实现:

这里我们采用 SWI-Prolog——一个十分完善、仍在开发、维护的开源实现。在 macOS 中,可以用 brew 安装 SWI Prolog:

$ brew install swi-prolog

Debian 系 Linux 也可以用 apt-get 来轻松完成安装。其他系统可以去 官网下载页 寻找对应的二进制文件或者从源码构建。

如果你不想或难以完成安装,SWI-Prolog 还为你准备了 在线版本

安装完成之后,通过 swipl 命令进入一个和 Python 类似的 SWI-Prolog REPL 环境(SWI-Prolog 的提示符是 ?-):

$ swipl
?- 

国际惯例,先写 Hello World:

?- write('Hello, World!').
Hello, World!    % write 打印的结果
true.            % 返回值

注意 Prolog 的语句最后以 . 结尾。

要退出 SWI-Prolog,可以摁 Control-D 或输入 halt.。(你可以通过键入 apropos(quit). 来找到关于“退出”的主题 halt,然后用 help(halt). 查看如何退出)

Prolog 基础语法

与我们平时接触的其他基于变量的编程语言不同,Prolog 的基础是

  • Facts:事实
  • Rules:规则
  • Queries:查询

这几个概念就是字面意思,如

  • 事实:11 不能被 2 整除。
  • 规则:不能被 2 整除的数是奇数。
  • 查询:11 是奇数吗?
    • 结果(答案):11 是奇数。

在 Prolog 中事实规则和在一起组成了知识库(Knowledge base),我们把这两者写在后缀

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值