meta-predicate相关内容

Prolog 中 `if_/3` 运算符的目标扩展

我正在编写一个标记器,我想使用 if_/3 来保留logical-purity 在我的代码中. 代码在左边看起来像下面的代码1...但我希望它看起来像右边的代码. if_(Cond1_1, % ( Cond1_1然后1, % *=> 然后1if_(Cond2_1, % ; Cond2_1然后2, % *=> 然后2if_(Cond3_1, % ; Cond3_1然后3, % *=> 然后3 ..
发布时间:2022-01-12 10:33:47 其他开发

描述关于关系排序的整数序列的最一般的高阶约束

在 CLP(FD) 中,我们经常需要声明:“这是按(有时:严格)升序/降序排列的整数和有限域变量的列表." 是否有任何 CLP(FD) 系统为此任务提供通用(可参数化)内置约束? SWI-Prolog 提供了一个名为 chain/2 的约束,这与我正在寻找的类似.但是,名称有点过于具体,无法包含约束可以描述的所有关系(例如:# ..
发布时间:2022-01-12 09:52:59 其他开发

路径/小径/步行的定义

许多谓词定义某种非循环路径,该路径由通过二元关系定义的边构建,非常类似于定义传递闭包.因此需要一个通用的定义. 请注意,图论中定义的概念并不容易符合通常的预期.最值得注意的是,我们对边的名称不感兴趣. 更糟糕的是,图论也发生了一些变化,引入了 walk 的概念, 注意到 传统上,路径指的是现在通常称为开放式步行的路径.如今,当没有任何限定的情况下,路径通常被理解为简单,这意味着没 ..

Prolog:过滤列表?

我目前正在 Prolog 上进行一个非常短的项目,但在尝试将我创建的“过滤器"应用到列表时遇到了困难.我准备好了你可以称之为过滤器的东西,但我不能应用它.最好能说明一下: filter(A, B) ...如果满足某些条件,则输出“真". filterList(A, [X, Y, Z]) ...输出一个列表,其中包含来自第二个参数的所有元素,这些元素使过滤器输出 false.(因此,如果 f ..
发布时间:2021-12-06 14:09:58 其他开发

Prolog 中`if_/3` 运算符的目标扩展

我正在编写一个标记器,我想使用 if_/3 来保留logical-purity 在我的代码中. 左边的代码看起来像下面的代码1—但我希望它看起来像右边的. if_(Cond1_1, % ( Cond1_1然后1, % *=> 然后1if_(Cond2_1, % ; Cond2_1然后2, % *=> 然后2if_(Cond3_1, % ; Cond3_1然后3, % *=> 然后3if_( ..
发布时间:2021-06-22 18:59:44 其他开发

依赖规则顺序

为了计算相同长度的两个列表之间的汉明距离,我使用 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( ..
发布时间:2021-06-22 18:56:48 其他开发

Prolog 绑定参数

在 sicstus prolog 中,有一个谓词: maplist(:Pred, +List) Pred 应该只接受一个参数 - List 元素.如何通过定义第一个参数的 2 参数谓词?在其他语言中,它会被写成: maplist(pred.bind(SomeValue), List) 解决方案 maplist(P_1, Xs) 会为 call(P_1, X) 的每个元素调用 call(P ..
发布时间:2021-06-22 18:54:31 其他开发

HiLog 术语在现代 Prolog 中仍然有用吗?

Hilog 术语(即具有作为函子任意术语的化合物)是否仍被视为 XSB Prolog(或任何其他 Prolog)中的强大功能?目前是否有许多 XSB 项目使用此功能?例如,他们中的哪一个? 我问是因为据我所知,使用 ISO 内置调用/N 同样可以进行高阶编程. 具体来说,我想了解 XSB 是否仅仅出于历史原因使用 Hilog 术语,或者 Hilog 术语与当前的 ISO 标准相比是否具 ..
发布时间:2021-06-22 18:42:03 其他开发

列表上的成对关系

如果列表的所有元素对对于给定关系都为真,则以下高阶谓词成功.对于这种关系,是否有一个共同的或更好的、更多意图揭示名称? 我使用这个名字的最初动机是在 clpfd,通常有一个约束 all_different/1 被描述为真,如果元素是成对不同.事实上,更喜欢说元素都不同,但我经常被纠正(由 Prolog 程序员)使用成对不同.事实上,这个约束现在可以最自然地表示为 pairwise(#\=, ..
发布时间:2021-06-22 18:42:00 其他开发

自反传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,却发现终止也必须被解决.为什么不使用 closure0/3 一劳永逸地解决这个问题: :- meta_predicateclosure0(2,?,?).:- meta_predicate 闭包(2,?,?).:- meta_predicateclosure0(2,?,?,+).% 内部的关闭0(R_2,X0,X): -关闭0(R_2,X0,X,[X0]).关 ..

Prolog,确定图是否为非循环

我需要定义一个谓词acyclic/1,该谓词将一个图作为输入并确定该图是否是非循环的.因此,根据我的理解 graph1(a,b). graph1(b,c). graph1(c,a). 将返回否,并且 graph2(a,b). graph2(b,c). 将返回是 我做了一个谓词,以确定图中是否有2个节点连接在一起,如果连接,它们将返回是. isConnected ..

最一般的高阶约束,描述相对于一个关系排序的整数序列

在CLP(FD)中,我们经常需要声明:“这是整数和有限域变量的列表(有时(严格地: )升/降序.) 是否有任何CLP(FD)系统为此任务提供常规(可参数设置)内置约束? SWI-Prolog提供了一个称为chain/2的约束,与我正在寻找的约束相似.但是,该名称过于具体,无法包含约束可以描述的所有关系(例如:# ..
发布时间:2020-07-11 02:35:00 其他开发

路径/步道/步行的定义

许多谓词定义了一些非循环路径,这些路径是通过二元关系定义的边构建的,与定义传递闭包。因此需要一个通用的定义。 请注意,图论中定义的概念并不容易与通常所期望的相符。最显着的是,我们对边缘的名字不感兴趣。更糟糕的是,图论也发生了一些变化,引入了散步,注意到 传统上,一条路径指的是现在通常所说的开放式散步。如今,当没有任何资格时,通常认为路径很简单,意味着没有顶点(并且因此没有边)被重复。 ..
发布时间:2018-05-25 16:51:58 其他开发