当前位置: 首页 > 工具软件 > SWI-Prolog > 使用案例 >

SWI-Prolog特性

冯旭
2023-12-01

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/2when/2dif/2), 全局变量, 循环术语。

·        重现-检查的标志控制字处理 (false/true/error)参看current_prolog_flag/2.

·        UNICODE 字符集处理内部。适用于web和国际应用程序。

·        多线程支持:在同一个数据库上运行多个预先调度的prolog引擎。

·        引擎, 也被称为交互器 提供协同程序这可以用于状态积累和大规模并发性,例如,群体智慧和仿真。

·        Delimitedcontinuations是新控制结构的强大构件

·        Tabling (SLGresolution) (SLG解析)提供了一种更健壮的解决方案,用于解决复杂相关规则的查询。

开发工具

  • 所有平台上的源代码级调试器,支持通过XPCEWindowsunix/linuxMacOSX)的图形。
  • 执行分析器 (时间和调用统计) 适用所有主要的平台(Windows, Linux, MacOSX).
  • 交叉引用器。 gxref/0提供了图形前端用于可扩展Prolog交叉引用器(xref)。
  • 通过PlDoc支持文学编程。提供关于手册和应用程序文档的集成视图并为你的应用生产LaTeX文档。
  • 支持通过PlUnit单元测试.
  • SWISH 提供了一个基于web的平台,用于在协作环境中开发和运行Prolog代码。

兼容性

  • 全面的内置谓词集,覆盖ISO标准的第1部分,事实上的爱丁堡Prolog标准,以及QuintusSICStus Prolog的重要部分。与CiaoYAPGNU-Prolog的兼容性。尽管目标是尽可能保持兼容性,SWI-Prolog故意偏离ISO标准,以适应额外的功能,并与现代语言同步。阅读更多的 [Extensions](<pldoc/man?section=extensions> and Directions

  • 约束逻辑编程, 提供库用于CHR (约束处理规则)、clp(FD)、 clp(R,Q) 及其它。

连通性

  • SWI-PrologHTTP提供了广泛的客户端和服务器库。HTTP服务器框架处理生成HTML、交换JSONXML、认证、会话等。客户端和服务器都支持HTTPS
  • 灵活快速的与CC++语言的接口。这个接口允许两种调用方式, 处理非确定性两种方式 和C/C++项目中嵌入SWI-Prolog内核。与高级语言的接口,例如使用JPL, Python 和 C#是可用的。
  • 据库连接是由ODBC 接口提供的。
  • 低级网络支持包括sockets(both TCP 和 UDP)、SSLTIPC
  • 快速和灵活的库用于解析SGML/XML (HTML), 解析RDF存储和查询 RDF三重模型

可移植性

  • 移植到多种平台, 包括几乎所有的unix/linux平台,Windows7和更高版本,3264位版本),MacOS X(使用Xquartz用于图形)等等。 支持32位和64位硬件。源代码是普通的C99 使用GNU autoconf自动配置(configure, make, make install).
  • 与机器无关的保存状态 (保存在一个平台上,使用另一个平台的虚拟机运行).
  • 用于Windows32/64位)和MacOS X64位)的常规二进制发行版,Ubuntu(稳定开发) PPAs的二进制发行版
  • 定期分发完整的源代码包。源代码也可以通过GIT进行访问。

合法性

  • SWI-Prolog是在简化的BSD许可下发布的,也被称为BSD-2许可证。一些使用过的库和扩展包有不同的许可条件。运行的配置的许可可以通过运行license/0来检查。有关详细信息,请参阅license

 

 

·        文档

o   参考手册

o   

SWI-Prolog 文档

SWI-Prolog 参考手册

SWI-Prolog包文档

SWI-Prolog绑定到libarchive

SWI-Prolog BerkeleyDB接口

SWI-Prolog C-库

约束查询语言是SQL数据库的高级接口

SWI-Prolog HTTP支持

JPL:双向Prolog/Java接口

SWI-Prolog 绑定到BSD libedit

SWI-Prolog自然语言处理基元

SWI-Prolog ODBC接口

SWI-Prolog正则表达式库

SWI-Prolog支持PDT

Pengines: 逻辑编程很容易

一个用于SWI-Prolog的C++接口

SWI-Prolog源文档版本2

Prolog 单元测试

Google的协议缓冲区库

SWI-Prolog RDF解析器

SWI-Prolog绑定到GNU readline

SWI-Prolog 语义Web库3.0

SWI-Prolog SGML/XML解析器

SWI-PrologSSL接口

为SWI-Prolog管理外部表

透明的进程间通信(TIPC)库

SWI-Prolog Unicode库

SWI-Prolog YAML库

SWI-Prolog绑定到zlib

手册为一本书,平装本是可用的。

 

 类似资料: