18得票6回答
Prolog:如何过滤列表?

我目前正在从事与Prolog相关的一个非常短暂的项目,但在尝试将我创建的“过滤器”应用于列表时遇到了困难。我已经准备好了你可以称之为过滤器,但是我无法应用它。最好我举个例子说明:filter(A, B) 如果满足特定条件,它将输出“true”。filterList(A, [X, Y, Z])...

46得票3回答
路径/小径/步道的定义

许多谓词通过二元关系定义的边构建了一种无环路径,类似于定义传递闭包。因此需要一个通用的定义。 请注意,图论中定义的概念与通常所期望的不完全匹配。特别是,我们对边的名称并不感兴趣。 更糟糕的是,图论也发生了一些变化,引入了walk这个概念,指出: 传统上,路径是指现在通常称为开放式步行的内容。...

11得票2回答
列表中的成对关系

以下高阶谓词成功的条件是对于给定的关系,列表元素的所有配对都为真。是否有一个常见或更好的、更表达意图的名称可以用来表示这个关系? 我最初使用这个名称的动机是,在clpfd中,经常存在一个约束all_different/1,它被描述为当且仅当元素两两不同时为真。实际上,我更喜欢说元素全部不同,...

22得票3回答
描述整数序列相对关系的最通用高阶约束条件

在CLP(FD)中,我们经常需要说明:"这是一个包含整数和有限域变量的列表,按(有时是严格)升序/降序排列。" 是否有任何CLP(FD)系统可以提供一般(可参数化的)内置约束来完成此任务? SWI-Prolog提供了一个称为chain/2的约束,它类似于我正在寻找的。但是,名称略微过于具体...

14得票2回答
Prolog GNU - Univ 运算符是什么?它的解释是什么?

那么这个univ运算符,我不太明白。 举个例子: foo(PredList,[H|_]) :- bar(PredList,H). foo(PredList,[_|T]) :- foo(PredList,T),!. bar([H|_],Item) :- G =.. [H,Item],G. ...

27得票1回答
反身传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,但发现必须解决终止问题。为什么不使用 closure0/3 一劳永逸地解决它呢? :- meta_predicate closure0(2,?,?). :- meta_predicate closure(2,?,?). :- meta_predicat...

40得票1回答
Prolog映射过程,将谓词应用于列表元素

如何编写Prolog过程map(List, PredName, Result),该过程将谓词PredName(Arg, Res)应用于List的元素,并将结果返回到列表Result中? 例如:test(N,R) :- R is N*N. ?- map([3,5,-2], test, L)....

7得票3回答
从谓词中收集所有“最小”的解决方案

假设有以下这些数据库中的事实: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2). 我希望收集所有第一个参数中,第二个参数最小的值,以及第二个参数的值。首先尝试: ...

9得票3回答
将部分列表折叠

这是一个由已删除的回答引发的问题,与这个问题有关。问题可以总结如下: 是否可能在折叠列表时,在折叠过程中生成列表的尾部? 我想表达的是这样的。假设我想计算阶乘(这只是一个愚蠢的例子,仅用于演示),并决定这样做: fac_a(N, F) :- must_be(nonne...

8得票2回答
HiLog术语在现代Prolog中是否仍然有用?

Hilog术语(即具有任意项作为函数符合的化合物)在XSB Prolog(或任何其他Prolog)中,仍被认为是一种强大的功能吗?目前有许多使用此功能的XSB项目吗?例如哪些项目? 我问这个问题,因为据我所知,使用ISO内置的call/N同样可以进行高阶编程。 具体来说,我想了解XSB是否...