Tag: iso 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 […]

在Prolog中,“和”有什么区别?

我是Prolog的新手,注意到“和”给出了不同的行为,但是为什么好奇呢,特别是当加载一个文件的时候, ?- ['test1.pl'].工作,而?- ["test1.pl"].不。