SWI-Prolog的特性
SWI-Prolog是Prolog语言的通用实现。它健壮的多线程,扩展的数据类型,无限的算术, 文本的Unicode表示允许文档的自然表达 (例如, XML, JSON, RDF) 以及与其他编程范例交换数据。 其全面的底层接口C是高级接口C++、Java (捆绑的)、C#、Python、等(外部可用)的基础。提供了一个广泛的web服务器(HTTP)框架,它可以用于提供(REST)服务和基于 HTML5+CSS+JavaScript的终端用户应用程序。 P引擎(Prolog引擎)允许客户端使用通用API在远程服务器上对客户端提供的程序进行查询。这样的程序可以在沙箱中执行。
配备了丰富的接口,Prolog是实现应用程序的一种很有吸引力的语言。它的增量编译与一般的本地和可回溯的数据结构(撤消)相结合,允许对程序进行修补,并在不重启的情况下继续测试它。它的关系范例很适合表格数据(RDBMS),而它的递归强度与树和图形的数据非常吻合。Prolog可以自然地表达实现应用程序逻辑所需的简单规则集。
约束和协同程序将规则附加到(更改)数据。结合回溯,这可以用一个简单的声明性规范来解决许多复杂的组合问题。经典的例子是谜题和规划问题。
SWI-Prolog提供了多种开发环境,其中大部分可以随意组合。本机系统提供了一个用Prolog编写的编辑器,这是Emacs的一个紧密克隆。它提供了基于Prolog系统本身的代码实时分析的语义突出显示。辅助工具包括图形调试器、剖析器和交叉引用器。交流方式,有一个GNU-Emacs和一个Eclipse插件的模式,这两种方法都可以与本机图形工具相结合。最后, SWISH提供基于上述P引擎的基于web的环境,这两种方法都可以用于提供沙箱访问或认证后的完全访问。通过使用语义突出显示,SWISH提供了多种源码的编辑。SWISH可以使用HTML5+CSS+JavaScript来管理插件来呈现Prolog数据。这可以用来将数据呈现为表格、图形、图表等。
SWI-Prolog提供一个附加的分发和安装机制,称为包。包是一个具有最少组织约定和控制文件的目录,它描述了原点、版本、依赖项和自动升级支持。包可以通过pack_install/1从存档、GIT仓库或URL安装。包被用来在社区中共享代码。包装系统已经发展出了一些生态系统来处理各种类型,协同程序等。
下面是我们所认为的SWI-Prolog的关键特性的列表,其中包含了相关文档的链接。
引擎
· 快速编译。例如, 在14秒内从Prolog源加载 WordNet 3.0 ,或者是在0.4秒内从快速加载文件格式加载(参看qcompile/1)。WordNet的源代码有821,515行。系统:英特尔i7-3770,32 Gb内存的Ubuntu 16.04。
· 健壮且没有内存泄漏。用于运行24x7(包括这个web服务)的几个服务器。
· 小的开发环境,包括图形、库和许多接口包,大约需要100MB硬盘。内核大约是1.4 MB(ubuntu16.04.so文件)
· 适用于大型应用程序。 不限制程序大小、原子长度、术语或整数值。在有许多(索引)事实的谓词上没有性能下降。
· 在任何参数上,静态和动态代码的即时索引大大简化了与许多子句处理多模的关系。在版本7.5中,支持多参数JITI。如果没有选择性的单参数索引,则会为两个参数的组合值创建一个索引。
· 基于GMP库的无限整数和有理数运算。
· 好处:模块(向上兼容Quintus和SICStus),垃圾收集(对C/C++代码透明,包括atom(原子)和clause(子句)垃圾收集),最后调用优化,运行时栈的动态扩展,ISO异常处理(包括用于捕获和抛出异常的C/C++接口)。
· 属性化变量,协同程序(freeze/2, when/2, dif/2), 全局变量, 循环术语。
· 重现-检查的标志控制字处理 (false/true/error)参看current_prolog_flag/2.
· UNICODE 字符集处理内部。适用于web和国际应用程序。
· 多线程支持:在同一个数据库上运行多个预先调度的prolog引擎。
· 引擎, 也被称为交互器 提供协同程序,这可以用于状态积累和大规模并发性,例如,群体智慧和仿真。
· Delimitedcontinuations是新控制结构的强大构件
· Tabling (SLGresolution) (SLG解析)提供了一种更健壮的解决方案,用于解决复杂相关规则的查询。
开发工具
兼容性
库
连通性
可移植性
合法性
· 文档
o 参考手册
o 包
透明的进程间通信(TIPC)库