meta-predicate相关内容
我正在编写一个标记器,我想使用 if_/3 来保留logical-purity 在我的代码中. 代码在左边看起来像下面的代码1...但我希望它看起来像右边的代码. if_(Cond1_1, % ( Cond1_1然后1, % *=> 然后1if_(Cond2_1, % ; Cond2_1然后2, % *=> 然后2if_(Cond3_1, % ; Cond3_1然后3, % *=> 然后3
..
因此,univ 运算符.我不是很明白. 例如: foo(PredList,[H|_]) :- bar(PredList,H).foo(PredList,[_|T]) :- foo(PredList,T),!.bar([H|_],Item) :- G =.. [H,Item],G.酒吧([_|T],项目):-酒吧(T,项目). 这是在做什么?这看起来看看另一个谓词是否为真.我不明白“.."
..
鉴于数据库中的以下事实: foo(a, 3).富(乙,2).富(c,4).富(d,3).富(e,2).富(f,6).富(克,3).富(h,2). 我想收集第二个参数最小的所有第一个参数,加上第二个参数的值.第一次尝试: find_min_1(Min, As) :-setof(B-A, foo(A, B), [Min-_|_]),findall(A, foo(A, Min), As).?- f
..
在 CLP(FD) 中,我们经常需要声明:“这是按(有时:严格)升序/降序排列的整数和有限域变量的列表." 是否有任何 CLP(FD) 系统为此任务提供通用(可参数化)内置约束? SWI-Prolog 提供了一个名为 chain/2 的约束,这与我正在寻找的类似.但是,名称有点过于具体,无法包含约束可以描述的所有关系(例如:#
..
许多谓词定义某种非循环路径,该路径由通过二元关系定义的边构建,非常类似于定义传递闭包.因此需要一个通用的定义. 请注意,图论中定义的概念并不容易符合通常的预期.最值得注意的是,我们对边的名称不感兴趣. 更糟糕的是,图论也发生了一些变化,引入了 walk 的概念, 注意到 传统上,路径指的是现在通常称为开放式步行的路径.如今,当没有任何限定的情况下,路径通常被理解为简单,这意味着没
..
我目前正在 Prolog 上进行一个非常短的项目,但在尝试将我创建的“过滤器"应用到列表时遇到了困难.我准备好了你可以称之为过滤器的东西,但我不能应用它.最好能说明一下: filter(A, B) ...如果满足某些条件,则输出“真". filterList(A, [X, Y, Z]) ...输出一个列表,其中包含来自第二个参数的所有元素,这些元素使过滤器输出 false.(因此,如果 f
..
我正在编写一个标记器,我想使用 if_/3 来保留logical-purity 在我的代码中. 左边的代码看起来像下面的代码1—但我希望它看起来像右边的. if_(Cond1_1, % ( Cond1_1然后1, % *=> 然后1if_(Cond2_1, % ; Cond2_1然后2, % *=> 然后2if_(Cond3_1, % ; Cond3_1然后3, % *=> 然后3if_(
..
我正在尝试编写一个谓词 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]
..
为了计算相同长度的两个列表之间的汉明距离,我使用 foldl(hamm, A, B, 0, R). 和 hamm/4 的定义代码>: hamm(A, A, V, V) :- !.hamm(A, B, V0, V1) :- A \= B, V1 是 V0 + 1. 第一条规则中的削减防止了不必要的回溯.但是,第二条规则可以写成不同的: hamm2(A, A, V, V) :- !.hamm2(
..
在 sicstus prolog 中,有一个谓词: maplist(:Pred, +List) Pred 应该只接受一个参数 - List 元素.如何通过定义第一个参数的 2 参数谓词?在其他语言中,它会被写成: maplist(pred.bind(SomeValue), List) 解决方案 maplist(P_1, Xs) 会为 call(P_1, X) 的每个元素调用 call(P
..
这是我试图理解的代码. co(X) :- co(X,[],L).co([],A,A):- 写(A).co([X|Xs], A, L) :- p(X-Z,A,R), !, Z1 是 Z+1, co(Xs, [X-Z1|R], L).co([X|Xs], A, L) :- co(Xs, [X-1|A], L).p(X-Y,[X-Y|R],R):- !.p(X,[H|Y], [H|Z]) :- p(X
..
Hilog 术语(即具有作为函子任意术语的化合物)是否仍被视为 XSB Prolog(或任何其他 Prolog)中的强大功能?目前是否有许多 XSB 项目使用此功能?例如,他们中的哪一个? 我问是因为据我所知,使用 ISO 内置调用/N 同样可以进行高阶编程. 具体来说,我想了解 XSB 是否仅仅出于历史原因使用 Hilog 术语,或者 Hilog 术语与当前的 ISO 标准相比是否具
..
如果列表的所有元素对对于给定关系都为真,则以下高阶谓词成功.对于这种关系,是否有一个共同的或更好的、更多意图揭示名称? 我使用这个名字的最初动机是在 clpfd,通常有一个约束 all_different/1 被描述为真,如果元素是成对不同.事实上,更喜欢说元素都不同,但我经常被纠正(由 Prolog 程序员)使用成对不同.事实上,这个约束现在可以最自然地表示为 pairwise(#\=,
..
许多谓词本质上使用某种形式的传递闭包,却发现终止也必须被解决.为什么不使用 closure0/3 一劳永逸地解决这个问题: :- meta_predicateclosure0(2,?,?).:- meta_predicate 闭包(2,?,?).:- meta_predicateclosure0(2,?,?,+).% 内部的关闭0(R_2,X0,X): -关闭0(R_2,X0,X,[X0]).关
..
你如何编写一个 Prolog 过程 map(List, PredName, Result) 将谓词 PredName(Arg, Res) 应用到 List 的元素,并返回列表中的结果Result? 例如: test(N,R) :- R 是 N*N.?- 地图([3,5,-2],测试,L).L = [9,25,4];不 解决方案 这通常称为 maplist/3 并且是 序言序言.注意不同
..
我需要定义一个谓词acyclic/1,该谓词将一个图作为输入并确定该图是否是非循环的.因此,根据我的理解 graph1(a,b). graph1(b,c). graph1(c,a). 将返回否,并且 graph2(a,b). graph2(b,c). 将返回是 我做了一个谓词,以确定图中是否有2个节点连接在一起,如果连接,它们将返回是. isConnected
..
鉴于数据库中的以下事实: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2). 我想收集第二个参数最小的所有第一个参数,再加上第二个参数的值.首先尝试: find_min_1(Min, As) :- setof(B-A, foo(A, B), [Min-
..
在CLP(FD)中,我们经常需要声明:“这是整数和有限域变量的列表(有时(严格地: )升/降序.) 是否有任何CLP(FD)系统为此任务提供常规(可参数设置)内置约束? SWI-Prolog提供了一个称为chain/2的约束,与我正在寻找的约束相似.但是,该名称过于具体,无法包含约束可以描述的所有关系(例如:#
..
因此,univ运算符.我不太了解. 例如: foo(PredList,[H|_]) :- bar(PredList,H). foo(PredList,[_|T]) :- foo(PredList,T),!. bar([H|_],Item) :- G =.. [H,Item],G. bar([_|T],Item) :- bar(T,Item). 这是做什么的?这看起来是要查看另一个
..
许多谓词定义了一些非循环路径,这些路径是通过二元关系定义的边构建的,与定义传递闭包。因此需要一个通用的定义。 请注意,图论中定义的概念并不容易与通常所期望的相符。最显着的是,我们对边缘的名字不感兴趣。更糟糕的是,图论也发生了一些变化,引入了散步,注意到 传统上,一条路径指的是现在通常所说的开放式散步。如今,当没有任何资格时,通常认为路径很简单,意味着没有顶点(并且因此没有边)被重复。
..