prolog特性的python实现。
pylog的Python项目详细描述
摘要(大纲摘自编程日志)
背景:作品的大背景是什么?一般研究领域的重要性是什么?a)pylog探索了两种不同的编程语言范式的集成:(i)现代通用编程范式,通常包括过程编程、面向对象编程、函数编程和元编程的特性,这里用python表示,以及(ii)逻辑编程,其主要特性是逻辑变量(和统一)和内置的深度优先搜索,这里用prolog表示。现代通用语言通常缺少这些逻辑编程特性。pylog演示了如何在python中实现这两个特性并将其集成到python中。
b)pylog展示了python的广度和广泛的适用性。尽管python现在是教授入门编程的最广泛使用的编程语言,但它也已被广泛用于复杂的编程任务。它流行的一个原因是它提供的一系列功能,其中大多数不用于基本编程类,也不用于通常与python相关联的脚本应用程序。Pylog有效地利用了其中的许多功能。
c)pylog最好的例子就是编程。pylog首先是一个编程练习:如何将逻辑编程的主要特性与python集成?其次,pylog使用了python的特性,这是aere有意和创新的。总体结果是值得研究的软件。从编程日志的角度来看,它将符合编程艺术的范畴。
简介
prolog是20世纪70年代发展起来的一种源于逻辑的编程语言,在20世纪80年代作为一种人工智能语言变得非常流行,尤其是在日本,它是第五代项目的一部分。
prolog失宠了因为很难跟踪prolog程序的执行情况,这使得调试非常困难。
在结构上,prolog是所有编程语言中最简单的一种,您可以很快地学习它,也是最有趣的语言之一。它与几乎所有其他编程语言都大不相同。在序言中,你对事实作出断言,然后对这些事实提出问题。答案是用变量(而不是赋值给)统一的。prolog是诱人的优雅和强大。
我们可以在这里看几个例子。
swi prolog
swi-prolog一直在燃烧prolog的火焰,似乎开发了一个成功的prolog用户社区。
< DL>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"人工智能"课程的""主要由
- Bratko,I.(2011年),Prolog中的人工智能编程,第4版,Addison Wesley.
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标识符以大写字母开头。
以前的工作
Berger,Shai(2004年)pythologic
Bolz,Carl Friedrich(2007年)python中的prolog解释器
德洛德,克里斯托夫(2009年)pylog
Frederiksen,Bruce Frederiksen(2011年)派克
Kopec,David(2019年)python中的约束满足问题摘自经典计算机科学Python中的ENCE问题,manning(Github代码库)
Maxime,Istasse(2016年)序言:python3的逻辑编程
Meyers,Chris(2015年)python中的prolog
Niemeyer、Gustavo和Sébastien Celles(2019年)。python公司nstraint。pypi页面:python约束(也在popovic,olivera(2019)中讨论过)用pytho约束编程n-约束)
orsini,francesc,paolo frasconi,luc de raedt(2017)kproblog:用于机器学习的代数prolog(这更像是对kproblog的理论讨论,它是用python实现的,而不是而不是python和prolog的集成。这是一个值得做出的区分。可以用任何通用语言实现prolog。pylog之所以引人注目,是因为它集成了python和prolog。)
Python基金会:HReF= ="HTTPS://DOCS.python .Org/3/Labaly/Re.HTML"Re="NoFoLoLo>"Re:正则表达式操作/p>
Rocklin,Matthew(2015年)统一
Rocklin,Matthew(2019年)Kanren:Python中的逻辑编程(toolZ工具的作者)
Santini,Claudio(2018年)pampy:您梦寐以求的Python模式匹配
堆栈溢出问题。
汤普森,杰夫(2017年)生成prolog
triska,markusclp(fd):有限域上的约束逻辑编程(还有clp(fd):有限域上的约束逻辑编程(repo of示例)