SWI-Prolog特性
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解析)提供了一种更健壮的解决方案,用于解决复杂相关规则的查询。
开发工具
- 所有平台上的源代码级调试器,支持通过XPCE(Windows、unix/linux、MacOSX)的图形。
- 执行分析器 (时间和调用统计) 适用所有主要的平台(Windows, Linux, MacOSX).
- 交叉引用器。 gxref/0提供了图形前端用于可扩展Prolog交叉引用器(xref)。
- 通过PlDoc支持文学编程。提供关于手册和应用程序文档的集成视图,并为你的应用生产LaTeX文档。
- 支持通过PlUnit单元测试.
- SWISH 提供了一个基于web的平台,用于在协作环境中开发和运行Prolog代码。
兼容性
- 全面的内置谓词集,覆盖ISO标准的第1部分,事实上的爱丁堡Prolog标准,以及Quintus和SICStus Prolog的重要部分。与Ciao,YAP和GNU-Prolog的兼容性。尽管目标是尽可能保持兼容性,SWI-Prolog故意偏离ISO标准,以适应额外的功能,并与现代语言同步。的 [Extensions](<pldoc/man?section=extensions> and Directions
库
- 约束逻辑编程, 提供库用于CHR (约束处理规则)、clp(FD)、 clp(R,Q) 及其它。
连通性
- SWI-Prolog为HTTP提供了广泛的客户端和服务器库。HTTP服务器框架处理生成HTML、交换JSON或XML、认证、会话等。客户端和服务器都支持HTTPS。
- 灵活快速的与C和C++语言的接口。这个接口允许两种调用方式, 处理非确定性两种方式 和在C/C++项目中嵌入SWI-Prolog内核。与高级语言的接口,例如使用JPL, Python 和 C#是可用的。
- 据库连接是由ODBC 接口提供的。
- 低级网络支持包括sockets(both TCP 和 UDP)、SSL和TIPC。
- 快速和灵活的库用于解析SGML/XML (HTML), 解析RDF, 存储和查询 RDF三重模型。
可移植性
- 移植到多种平台, 包括几乎所有的unix/linux平台,Windows(7和更高版本,32和64位版本),MacOS X(使用Xquartz用于图形)等等。 支持32位和64位硬件。源代码是普通的C99, 使用GNU autoconf自动配置(configure, make, make install).
- 与机器无关的保存状态 (保存在一个平台上,使用另一个平台的虚拟机运行).
- 用于Windows(32/64位)和MacOS X(64位)的常规二进制发行版,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
手册为一本书,平装本是可用的。
SWI-Prolog特性相关推荐
- swi prolog 和java_在Java和SWI Prolog之间连接 - java
我正在尝试从Java运行swi prolog 我正在使用eclipse,并且已将jpl.jar插入到项目中(属性->库->添加外部jar),当我尝试运行程序时(这是jpl的示例,因此应该可 ...
- swi prolog 和java_java-如何在Android中使用swi-prolog
我使用swi-prolog开发了一个prolog程序,并使用带有JPL.jar的常规java为其附加了接口, 运行得很好. 现在,我想使用android移动界面而不是java桌面界面执行相同操作.因此 ...
- swi prolog 和java_制作适用于GNU和SWI的Prolog代码
可移植性是Prolog的最弱点之一 - ISO标准定义了current_prolog_flag / 2,但没有列出'name'实现的标志 . 我使用以下代码在SWI和YAP之间切换 swi :- pr ...
- swi plog 使用 learn prolog now的学习
prolog工具的使用 swi prolog http://www.swi-prolog.org/ 下载了windows版本, 使用 ?- [swi('demo/likes')]. 来载入prolog ...
- Learn Prolog Now 翻译 - 第二章 - 合一和证明搜索 - 第一节, 合一
Learn Prolog Now 翻译 - 第二章 - 合一和证明搜索 - 第一节, 合一 内容提要: 合一的定义: 一些合一的例子: 触发校验: 使用合一编程: 合一的定义 在上一章的知识库KB4中 ...
- 现在学 Prolog 合一和证明搜索
转载自:https://mp.weixin.qq.com/s/SeMjK-_XR69jSQEQ-iRHMg 本章有两个主要目标: 1. 讨论Prolog中的合一,并解释Prolog合一与标准合一有何不 ...
- c语言实现逻辑谓词编程,头脑风暴-逻辑编程语言Prolog(01)
Prolog语言介绍 Prolog的英语意思就是Programming in logic(逻辑编程).与几乎无所不能的C语言或是Python语言不同,Prolog不是一种通用语言,比如说它并不能够写出 ...
- Prolog教程 9
Prolog的程序就是谓词的数据库,我们通常把这些谓词的子句写入Prolog的程序中的.在运行Prolog时,解释器首先把所有的子句调入到内存中.所以这些写在程序中的子句都是固定不变的.那么有没有办法 ...
- Prolog教程 2
探索Prolog Prolog在英语中的意思就是Programming in LOGic(逻辑编程).它是建立在逻辑学的理论基础之上的, 最初是运用于自然语言的研究领域.然而现在它被广泛的应用在人工智 ...
- comp3411辅导assignment2
对本文有疑问可以加微信 Tutor_0914联系.也可查看个人辅导网站了解详情: tutoryou辅导详情 文章目录 1 内容分析 1.1 1.2 模拟机器人 1.2.1 代码使用 1.1.4 tes ...
最新文章
- console.log(text)打印不出来的值,用console.log(text.length)却打印出来长度为1?
- Netty学习笔记(一)
- 计算机应用基础考证理论知识,《计算机应用基础》考试大纲
- android 按键消息,Android监听Home按键消息
- javascript php 性能,JavaScript知识点总结之如何提高性能_javascript技巧
- B - A Funny Bipartite Graph
- Solr-5.3.1安装配置
- 循环序列模型 —— 1.3循环神经网络
- 【hue】 Access denied to hive-未解决
- Ubuntu 18.04安装codeblocks 17-12
- 2017.4.14上午
- c# owc11 双Y轴
- macbook电池用什么软件测试,Wattagio Mac_Wattagio For Mac(电池检测软件) v1.1苹果电脑版 - 121苹果网...
- 移动端后台管理系统框架
- TiDB PCTP(PingCAP 认证 TiDB 数据库专家) 认证考试高分攻略
- 湖北专升本MySQL复习(MySQL数据库实用教程)——MySQL数据表的操作
- z变换判断稳定性和因果性_判断因果性.PPT
- rpm软件安装冲突:conflicts with
- 大文件的传输方案(scp以及文件切割)
- GAN之父Ian Goodfellow回归谷歌!将在DeepMind远程办公