meta-predicate

    0热度

    2回答

    我正在进行一项练习,借此我试图使用= ..谓词编写一个过程,该过程删除列表中PredName(X)失败的所有元素并返回其余列表作为结果: filter(List, PredName, Result) 在这种情况下与PredName被定义为: test(N) :- atom(N). 例如: ?- filter([a,b,-6,7,A,-1,0,B], test, L). L = [a,b,

    5热度

    1回答

    目标使用SWI-Prolog(多线程,64位,版本7.3.5), 模块扩展我们按部就班: 在模块dcgAux定义dcg非终结a//1 (发音: “二SEE-吴”): :- module(dcgAux,[a//1]). a(0) --> []. a(s(N)) --> [a], a(N). 执行如下查询,使用phrase/2和apply:foldl/4: ?- use_module

    1热度

    2回答

    我想出来的行使下列事实 byCar(auckland,hamilton). byCar(hamilton,raglan). byCar(valmont,saarbruecken). byCar(valmont,metz). byTrain(metz,frankfurt). byTrain(saarbruecken,frankfurt). byTrain(metz,paris). b

    7热度

    1回答

    Hilog术语(即具有作为函子任意术语的化合物)仍然被视为XSB Prolog(或任何其他Prolog)中的强大特征? 目前有很多XSB项目使用这个功能吗?他们中的哪一个? 我问,因为据我所知,使用ISO内置呼叫/ N,同样可以进行更高阶的编程。 具体而言,我想了解XSB是否仅出于历史原因使用Hilog术语,或者Hilog术语与现行ISO标准相比具有相当大的优势。

    2热度

    2回答

    我需要定义一个谓词acyclic/1,它将图作为输入并确定该图是否是非循环的。因此,从我的理解 graph1(a,b). graph1(b,c). graph1(c,a). 将不会返回和 graph2(a,b). graph2(b,c). 将返回是 我做了一个断言,以确定是否在图2个节点相连接,如果是的话,他们将返回是。 isConnected(X,Y) :- a(X,Z), isC

    1热度

    1回答

    我一直在阅读并注意到,诸如调用的谓词被称为元谓语,并且它们可以返回其他谓词作为结果(不知道返回是否很好地利用了单词这里)例如这里: assert(call(goal, X,Y)). 编辑:lurker打电话给我的理由,这是行不通的。 据我所知,它不应该调用谓词函数,但是有没有一种方法来断言直到运行时才会知道的谓词? 我想为多个事实使用相同的插入谓词,所以assert(fact(X))不适合我的

    1热度

    2回答

    正如标题所示,我想编写一个程序来完成此操作。 一个例子是: ?- count(member(X,[1,2,3]), N). N = 3 Yes 但不仅为会员构建,同时也为像一些运营商: ?- count(17 =:= 12 + 5, N). N = 1 Yes 有人可以帮助我开始了吗?

    1热度

    1回答

    我正在使用Sicstus Prolog,并试图解决Domino拼图问题。 我有一个三胞胎列表,我需要设置的域名。我知道如何设置单个变量的域或单个变量的列表,但是如果我的列表具有三元组,并且三元组中的每个元素都有不同的域,我该如何做? DV = [R1-C1-D1, R2-C2-D2, ... , R15-C15-D15] 我想要做的是这样的: domain(R1, 1, 4) domain(

    3热度

    3回答

    我想写一个谓词filter(List, PredName, Result),它过滤所有元素的List,其目标PredName失败并随后返回Result列表。谓词PredName/1应该调用过程filter/3时被定义并可以例如是: test(N) :- N >= 0 查询然后可以做出类似以下内容: ?- filter([-6,7,-1,0], test, L) L = [7, 0]; no