Prolog解释器实现记录(一)
原创大约 2 分钟
前言
Get your hands dirty!
为什么想实现一个Prolog
解释器呢?因为我最近在学离散数学,而离散数学里面涉及到非常多的数据结构和布尔代数、命题、谓词逻辑、证明等。我觉得如果用计算机实现命题的自动推导会很有趣,而Prolog
又是一种提供了相关功能的语言。我是个闲不住的人,而且喜欢造轮子。如果只是在学习数学、而不动手写点代码的话,我会觉得非常无聊。这是我的一个小作品,我的软件工程和数据结构能力尚不那么成熟,可能会造出一坨屎,但是我愿意去尝试。该解释器采用循序渐进实现Prolog
语法的形式,便于读者学习。
本项目的实现源码位于Github Tiny-Prolog项目。此外,Rosen《离散数学及其应用》的相关笔记会整理在Rosen 《离散数学及其应用》 阅读笔记,有兴趣的同学可以参考。离散数学的学习过程和Prolog解释器的实现过程会同步进行。
REPL实现
首先,我们实现基本的REPL,即通过一个while(1)
循环不停的读入prolog
命令,该解释器使用ctrl-c
退出。因为python
将ctrl-c
识别为KeyboardInterrupt
,所以我们可以使用一个try except
语句来探测该字符,并且退出程序。
循环如下:
import sys
while 1:
try:
command = input("?- ")
# TODO: do the interpretations below
except KeyboardInterrupt:
sys.exit(0)
Prolog 语言标准
Prolog语言 ISO 标准见此下载:
赞助