prolog特性的python实现。

pylog的Python项目详细描述


摘要(大纲摘自编程日志

背景:作品的大背景是什么?一般研究领域的重要性是什么?
Pylog包含三个编程上下文。

a)pylog探索了两种不同的编程语言范式的集成:(i)现代通用编程范式,通常包括过程编程、面向对象编程、函数编程和元编程的特性,这里用python表示,以及(ii)逻辑编程,其主要特性是逻辑变量(和统一)和内置的深度优先搜索,这里用prolog表示。现代通用语言通常缺少这些逻辑编程特性。pylog演示了如何在python中实现这两个特性并将其集成到python中。

b)pylog展示了python的广度和广泛的适用性。尽管python现在是教授入门编程的最广泛使用的编程语言,但它也已被广泛用于复杂的编程任务。它流行的一个原因是它提供的一系列功能,其中大多数不用于基本编程类,也不用于通常与python相关联的脚本应用程序。Pylog有效地利用了其中的许多功能。

c)pylog最好的例子就是编程。pylog首先是一个编程练习:如何将逻辑编程的主要特性与python集成?其次,pylog使用了python的特性,这是aere有意和创新的。总体结果是值得研究的软件。从编程日志的角度来看,它将符合编程艺术的范畴。

询问:这篇论文解决了什么问题?其他人(如果有的话)是如何解决这个问题的?
本文和pylog本身解决的主要问题是如何将逻辑变量和回溯干净地集成到python框架中。在这方面已经做了相当多的工作:参见相关工作。虽然做得很好,但大部分都是不完整的。Pylog是实现集成目标的第一个完整系统(据我们所知)。
方法:我们做了什么来揭示新知识?
Pylog,展示了上述集成。本文讨论并演示了pylog如何将逻辑变量和回溯与标准python数据结构和控制结构交织在一起。
知识:发现了哪些新的事实?如果这项研究不是以结果为导向的,那么这项工作将带来哪些新的能力?
pylog可用作python软件中使用的逻辑编程库。
接地:什么样的论据、可行性证明、工件或结果和评估支持这项工作?
pylog通过其存在和功能性证明,可以实现与python集成逻辑变量和回溯的目标。
重要性:为什么这项工作很重要? 众所周知,python与函数式编程兼容。这项工作表明,它也(同时)与逻辑编程兼容。这项工作也展示了精心设计的软件的强大和优雅。

简介

prolog是20世纪70年代发展起来的一种源于逻辑的编程语言,在20世纪80年代作为一种人工智能语言变得非常流行,尤其是在日本,它是第五代项目的一部分。

prolog失宠了因为很难跟踪prolog程序的执行情况,这使得调试非常困难。

在结构上,prolog是所有编程语言中最简单的一种,您可以很快地学习它,也是最有趣的语言之一。它与几乎所有其他编程语言都大不相同。在序言中,你对事实作出断言,然后对这些事实提出问题。答案是用变量(而不是赋值给)统一的。prolog是诱人的优雅和强大。

我们可以在这里看几个例子。

swi prolog

swi-prolog一直在燃烧prolog的火焰,似乎开发了一个成功的prolog用户社区。

< DL>
来自swi prolog网站 swi prolog是prolog语言的一个通用实现。尽管swi-prolog主要在教育领域获得了普及,但它的发展主要是由应用程序开发的需求驱动的。这有助于通过支持许多文档类型和(网络)协议以及对C的全面低层接口来实现对其他IT组件的丰富接口,这是C++、Java(捆绑)、C**、Python等高级接口(外部可用)的基础。数据类型扩展(如dict和string)以及对unicode和无边界整数的完全支持简化了与其他组件的数据平滑交换。

swi-prolog的目标是可伸缩性。它对多线程的强大支持有效地利用了多核硬件,并简化了在并发应用程序中的嵌入。它的即时索引(jiti)为包含数百万子句的谓词提供了透明和高效的支持。

序言教程

  • Blackburn、Patrick、Johan Bos和Kristina Striegnitz(2012年)立即学习序言!(本书的这个版本嵌入了swi prolog的swi-sh中,swi-prolog.org/" rel="nofollow">swi-sh(swi-prolog.org/" rel="nofollow">swi-prolog用于共享),一个类似于jupyter的在线prolog解释器。

  • 比尔,威尔逊,"prolog编程简介",comp9414/9814"人工智能"课程的""主要由

  • Piumarta,Ian(2017年)"编程语言范例"(一门课程)。"逻辑编程和序言"将在第5周(第6周)(第6周)进行探索。7epiumarta/pl/slides/pl-06.pdf" rel="nofollow">幻灯片-6,练习-6,第7周(幻灯片-7练习-7)。第7周是序言教程。你不必在第5周和第6周的第一次阅读就能理解它。但那几周很重要。他们展示了在python中实现许多prolog特性。

pylog:python中的prolog

这个存储库是许多prolog特性的python实现。它是Piumarta的一个分支。

作为一个介绍性示例,请考虑以下(python)代码改编自piumarta的第5周练习。(您可以在这里运行)(类型注释不是必需的,但它们对于理解正在发生的事情很有用。)

fromtypingimportGeneratordefisEven(i:int)->Generator[None,None,None]:ifi%2==0:print(f'{i}-even',end=', ')yieldelse:print(f'{i}-odd',end=', ')evens=[iforiinrange(10)for_inisEven(i)]print(f'\n{evens}')

你能搞清楚前面这些结果是怎么产生的吗?

0-even,1-odd,2-even,3-odd,4-even,5-odd,6-even,7-odd,8-even,9-odd,[0,2,4,6,8]

具体来说,什么是

for_inisEven(i)

在列表中理解吗?

在prolog中,程序组件被理解为谓词。他们可能会成功或失败。成功/失败意味着系统在给定可用信息的情况下无法确定谓词是否有效。

成功或失败是通过生成器在python中实现的。产生结果(在python级别)的生成器被称为成功(在prolog级别);不产生结果的生成器则失败(在prolog级别)。

在这种情况下,当i为偶数/奇数时,is even(i)成功/失败。(在这两种情况下都会生成输出行。)当

for_inisEven(i)

对于给定的i,列表理解完成/未能完成该i的迭代,并且在生成的列表中包含/不包含i

在python中实现逻辑变量和统一

待编写

在python中实现prolog回溯

待编写

文件组织(最近未更新)

pylog                            -- Root directory
    examples                     -- A directory of example pylog programs
        n_queens.py              -- The traditional n-queens problem. Uses minimal pylog features but illustrates the pylog style.
        puzzles.py               -- A file containing information common to the scholarship_problem and the zebra_problem
        scholarship_problem.py   -- A traditional Prolog logic puzzle—less complex than the zebra problem
        trains.py                -- A revised version of the train example from Piumarta
        zebra_problem.py         -- The well-known logic puzzle often solved with Prolog
    sequence_options             -- A directory of options for lists and sequences
        linked_list.py           -- A traditional head/tail list structure. Allows a variable tail, which Python does not
        sequences.py             -- Implementations of Python lists and tuples
        super_sequence.py        -- A class that serves as a superclass for all the sequences
    control_structures.py        -- Implementation of the Prolog control structures
    logic_variables.py           -- Implementation of Prolog's logic variables

文件依赖项/从关系导入(最近未更新)

logic_variables: none
control_structures: logic_variables

super_sequence: control_structures, logic_variables
linked_list and sequences: logic_variables, super_sequence

n_queens: logic_variables, sequences
trains: control_structures, logic_variables, sequences
puzzle: super_sequence
scholarship_problem and zebra_problem: control_structures, logic_variables, puzzles, super_sequence

命名约定

在大多数情况下,python标识符名称遵循pep 8约定:所有小写,单词之间有下划线;除了类名,没有驼峰大小写。

但是,由于prolog使用以大写字母开头的标识符作为prolog变量,因此用作prolog变量的python标识符以大写字母开头。

以前的工作

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么会导致程序在它似乎拥有的监视器上被阻止?   java Android studio设置视图的背景色   java我可以保存一个文本文件而不给用户修改它的能力吗?   pdfbox PDFBOX2。0:java堆堆栈错误   java是维护和操作AllowList的有效方法   JAVAsql。SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/asd性爱   如何使用java。lang.NullPointerException:void 安卓。支持v7。应用程序。ActionBar。setElevation(float)“”在空对象引用上'   java调试空指针异常   java正则表达式,以按令牌的特定匹配项拆分,同时忽略其他匹配项   java为JPanel设置边框上的笔划   并发@Schedule方法的java行为   如何在Java中使用泛型与语言运算符和泛型类扩展数   java Rhino Javascript如何为异常堆栈跟踪标记字符串源   运行可执行jar时发生java错误,无法找到或加载主类