Tag: prolog

重新安排variable_names

如何以符合标准的方式avs_term_rearranged(AVs, T, AVsR)具有给定的AVs和T avs_term_rearranged(AVs, T, AVsR) ,使得AVsR是AVs的排列,其中排列顺序与它们的variables相同的元素在T以从左到右的顺序出现。 AVs是A = Vforms的元素的列表,其中A是指示variables名称如'X'的primefaces, V是相应的variables。 这样的列表由read_term/2,3和read-option variable_names/1 (7.10.3)生成。 另外,没有定义元素的精确顺序。 | ?- read_term(T,[variable_names(AVs)]). A+B+A+_+C. AVs = ['A'=A,'B'=B,'C'=C] T = A+B+A+_+C T是一个包含AVs所有variables加上一些的术语。 请注意,在标准的一致性程序中,不能依赖于variables(7.2.1)的术语顺序: 7.2.1variables 如果X和Y是不相同的variables,则X term_presented Y应该是实现相关的,除了在创build一个sorting列表(7.1.6.5,8.10.3.1j)期间,sorting应保持不变。 注 – 如果X和Y都是匿名variables,那么它们就不是同一个术语(见6.1.2a)。 以8.4.3.4为例: sort([f(U),U,U,f(V),f(U),V],L). Succeeds, unifying L with [U,V,f(U),f(V)] or [V,U,f(V),f(U)]. [The solution is implementation dependent.] 所以有两种可能的方式,第二sort/2将工作,甚至不能依靠的成功: sort([f(U),U,U,f(V),f(U),V],L), sort(L, K), L == K. […]

统一STO检测

在ISO Prolog中,统一只针对NSTO(不受发生检查)的情况定义。 背后的想法是涵盖主要在程序中使用并且实际上由所有Prolog系统支持的统一的情况。 更具体地说,ISO / IEC 13211-1:1995的内容如下: 7.3.3发生检查(STO)而不是主题 发生检查(NSTO) 一组方程(或两个项)是“可能发生的 – 检查“(STO)是否有办法进行 Herbrandalgorithm的步骤使得7.3.2g 发生。 一组方程(或两个方程)是“不受限制的” 发生检查“(NSTO),如果没有办法进行 通过Herbrandalgorithm的步骤 7.3.2克发生。 … 这一步7.3.2克读取: g)如果有一个forms为X = t这样的方程 X是一个variables, t是一个非variables项 其中包含这个variables,然后退出失败( 不是 统一的 , 积极的发生检查 )。 完整的algorithm被称为Herbrandalgorithm,通常被称为Martelli-Montanari统一algorithm ,它基本上是通过以非确定性方式重写一组方程来进行的。 请注意,新方程引入: d)如果存在formsf(a 1 ,a 2 ,… a N )=的方程, f(b 1 ,b 2 ,… b N ),然后用方程组代替它 a i = b i […]

什么是适用于Linux的Prolog IDE?

我需要为一个类编写一些Prolog程序。 任何build议?

期限平等/不平等的具体化

用纯净的方式区分术语的平等和不平等的Pure Prolog程序遭受执行效率低下的影响; 即使所有相关条款都是基础的。 最近的例子就是这个答案 。 所有的答案和所有的失败在这个定义是正确的。 考虑: ?- Es = [E1,E2], occurrences(E, Es, Fs). Es = Fs, Fs = [E, E], E1 = E2, E2 = E ; Es = [E, E2], E1 = E, Fs = [E], dif(E, E2) ; Es = [E1, E], E2 = E, Fs = [E], dif(E, E1) ; Es […]

用于Java的embedded式Prolog解释器/编译器

我正在开发一个Java应用程序,它需要做一些复杂的逻辑规则推理作为其function的一部分。 我想在Prolog或其他一些逻辑/约束编程语言中编写我的逻辑推理,而不是Java,因为我相信所得到的代码会更简单,更易于维护。 我在Prolog上searchembedded式Java实现,发现它们的数量很less,每个文档都很less。 我(适度)的select标准是: 应该可以embedded到Java中(例如,可以与我的Java软件包捆绑在一起,而不需要在外部程序上进行本地安装) 从Java使用简单的接口(用于启动扣除,检查结果和添加规则) 至less有几个关于如何使用它的例子 不一定必须是Prolog,但是具有上述标准的其他逻辑/约束编程语言也适合我的需求。 我有什么select,他们的优点和缺点是什么?

网球比赛安排

数量有限的球员和数量有限的网球场。 每场比赛最多可以有多less场比赛。 没有人rest2轮。 每个人都和其他人玩。 产生尽可能less的轮次的时间表。 (因为每个人之间必须有轮休的规则,所以可以有一轮没有比赛。)5个球员和2个球场的输出可以是: | 1 2 3 4 5 -|——————- 2| 1 – 3| 5 3 – 4| 7 9 1 – 5| 3 7 9 5 – 在这个输出中,列和行是玩家号码,matrix内的数字是这两个玩家竞争的轮数。 问题是find一个algorithm,可以在一个可行的时间更大的情况下做到这一点。 我们被要求在Prolog中这样做,但任何语言的(伪)代码都是有用的。 我的第一个尝试是一个贪婪的algorithm,但是结果太多了。 然后我提出了一个迭代深化的深度优先search,这是我的一个朋友实现的,但是对于7个玩家来说,这个search仍然花费了太多的时间。 (这是从一个旧的考试题目,我没有任何解决scheme。)

在逻辑编程方面,Prolog和miniKanren之间的主要技术差异是什么?

当我想阅读逻辑编程时,我总是绊倒现在做的两种“主要”方式: miniKanren ,在The Reasoned Schemer中引入的一种微型语言 ,由于core.logic而受欢迎 。 Prolog ,第一个“大”的逻辑编程语言。 我现在感兴趣的是:两者之间的主要技术差异是什么? 它们在方法和实现方面非常相似,还是采取完全不同的逻辑编程方法? 他们来自哪些math分支,什么是理论基础?

整合Prolog与C#

有谁知道一个很好(而且最好是免费)的方式来集成Prolog和C#? 我正在寻找创build一个Prolog DLL或类似的从我的托pipe代码调用,并检索一个答案一旦所有的处理已完成。 我期待它主要是单方面的(C#调用Prolog)。 我已经看到了这个问题 ,谈论Prologs真实世界的用法,但我想知道如果任何人有任何经验与C#&P​​rolog? 或一个不错的教程/文章?

序言:一个人是自己的兄弟?

我有一些麻烦,理解为什么我的代码在序言中做了一些基于我把我的规则的顺序。 这是我的数据库: parent(tom, bob). parent(tom, liz). parent(mary, bob). parent(mary, liz). male(tom). male(bob). female(mary). female(liz). 这里是规则: %difference(X, Y) ==> Predicate to check if two people X and Y are not the same person. difference(X, Y) :- \==(X, Y). father(X, Y) :- male(X), parent(X, Y), difference(X, Y). mother(X, Y) :- female(X), parent(X, Y), difference(X, Y). sibling(X, Y) […]

Prolog中符合逻辑的“不”是什么?

我面对的问题有点微不足道。 我想在Prolog中使用逻辑,但似乎not/1不是我想要的东西: course(ai). course(pl). course(os). have(X,Y) :- course(X),course(Y),not(X = Y). 我查询: have(X,Y), write(XY), nl , fail. 而我没有得到我想要的结果:(