跳至主要內容

Prolog解释器实现记录(一)

Salvely原创大约 2 分钟

前言

Get your hands dirty!

为什么想实现一个Prolog解释器呢?因为我最近在学离散数学,而离散数学里面涉及到非常多的数据结构和布尔代数、命题、谓词逻辑、证明等。我觉得如果用计算机实现命题的自动推导会很有趣,而Prolog又是一种提供了相关功能的语言。我是个闲不住的人,而且喜欢造轮子。如果只是在学习数学、而不动手写点代码的话,我会觉得非常无聊。这是我的一个小作品,我的软件工程和数据结构能力尚不那么成熟,可能会造出一坨屎,但是我愿意去尝试。该解释器采用循序渐进实现Prolog语法的形式,便于读者学习。

本项目的实现源码位于Github Tiny-Prolog项目open in new window。此外,Rosen《离散数学及其应用》的相关笔记会整理在Rosen 《离散数学及其应用》 阅读笔记,有兴趣的同学可以参考。离散数学的学习过程和Prolog解释器的实现过程会同步进行。

REPL实现

首先,我们实现基本的REPL,即通过一个while(1)循环不停的读入prolog命令,该解释器使用ctrl-c退出。因为pythonctrl-c识别为KeyboardInterrupt,所以我们可以使用一个try except语句来探测该字符,并且退出程序。

循环如下:

import sys

while 1:
    try:
        command = input("?- ")
        # TODO: do the interpretations below
    except KeyboardInterrupt:
        sys.exit(0)

Prolog 语言标准

Prolog语言 ISO 标准见此下载: