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 Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾