问题标签 [meta-predicate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
20134 浏览

list - Prolog:过滤列表?

我目前正在做一个关于 Prolog 的非常短的项目,只是在尝试将我创建的“过滤器”应用于列表时遇到了困难。我已经准备好你可以称之为过滤器的东西,但我无法应用它。如果我说明一下会更好:

...如果满足某些条件,则输出“真”。

...输出一个列表,其中包含第二个参数中使过滤器输出为false的所有元素。(因此,如果 filter(A, X) 为真,则输出为 [Y, Z] )。

我已经准备好“过滤器”函数,但现在我需要将它应用到列表中,如第二个示例所示,不包括使用第一个参数应用时过滤器返回 true 的所有元素。

因此,如果过滤器是简单的 A == B,则该函数应该接收 A [A,B,A,C,D,A] 并输出 [B,C,D],并删除所有显然,过滤器适用。

我在函数的基本结构上遇到了麻烦,所以如果有人可以为这样的函数提供一个基本的大纲,那将会有很大的帮助。我已经尽可能地简化了我的情况,所以我可以接受你可以提供的任何东西,并根据我的需要进行修改。

提前致谢!

0 投票
3 回答
563 浏览

prolog - Prolog中的反向查找?(我如何找到关于 X 的所有真实情况?)

所以,假设我在 Prolog 数据库中有以下内容:

很明显,如果我想列出所有人,我可以输入:

但是,如果我想找到关于约翰的所有真实情况怎么办?我不能做:

但我想要的效果是能够放入“john”并返回“person”和“happy”。

显然还有另一种方式可以存储我的信息:

然后,我可以这样做:

但我在这里失去了一些表现力。我真的很想能够做类似的事情:

有任何想法吗?

谢谢!

0 投票
2 回答
6432 浏览

prolog - Prolog GNU - Univ 运算符?它的解释

所以univ运算符。我不太明白。

例如这个:

这是在做什么?这看起来看看另一个谓词是否为真。我不明白“..”是做什么的。

如果没有 univ 运算符,你将如何重写它?

0 投票
3 回答
1528 浏览

prolog - Prolog 过滤自定义目标失败的所有元素的列表

我正在尝试编写一个谓词filter(List, PredName, Result)来过滤List目标失败的所有元素,PredName然后返回Result列表。谓词PredName/1应在调用过程时定义filter/3,例如:

然后可以进行如下查询:

0 投票
1 回答
33677 浏览

prolog - 将谓词应用于列表元素的 Prolog 映射过程

如何编写map(List, PredName, Result)将谓词应用于PredName(Arg, Res)元素List并在列表中返回结果的 Prolog 过程Result

例如:

0 投票
2 回答
139 浏览

prolog - 依靠规则秩序

为了计算两个相同长度的列表之间的汉明距离,我使用foldl(hamm, A, B, 0, R).以下定义hamm/4

第一条规则中的剪切防止了不必要的回溯。然而,第二条规则可以用不同的方式写成:

并且对于 A 和 B 都接地的查询hamm2/4仍然是正确的。foldl/5

那么,是否有充分的理由偏爱其中一个而不是另一个呢?还是有理由保持规则的顺序或改变它们?

我知道查询

是假的,而

是真的,但我不能完全决定哪一个更有意义。. .

0 投票
2 回答
716 浏览

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

Hilog 项(即具有任意项作为函子的化合物)是否仍然被视为 XSB Prolog(或任何其他 Prolog)中的强大功能?目前有很多 XSB 项目使用这个功能吗?例如,他们中的哪一个?

我问,因为据我了解,使用 ISO 内置 call/N 进行高阶编程同样可能。

具体来说,我想了解 XSB 是否只是出于历史原因使用 Hilog 术语,或者与当前的 ISO 标准相比,Hilog 术语是否具有相当大的优势。

0 投票
1 回答
338 浏览

prolog - 最大列表 gnu 序言

在 GNU prolog 中,有约束: 我有一个列表,对于 N = 5(例如),它是这样的: [3*(1-_#0(0..1)),2*(1-_#18(0..1)),1*(1-_#36(0..1)),4*(1-_#54(0..1)),2*(1-_#72(0..1))]

我正在研究有限域约束环境,我尝试了这个 max_list(MaxFilter, M0),

我得到了这个错误(因为此时变量没有值)未捕获的异常:error(type_error(evaluable,_#4195373(0..1)),(=<)/2)

在 Eclipse 中,我会使用 eval,而在 SWI 中,我使用这个谓词

但我在 GNU 中没有找到任何等效的 foldl 。

我应该怎么办?有任何想法吗?我被卡住了,我已经在整个互联网上搜索了几天......

我真正想要的是找到这个列表的最大值,当解决方案列表的标签发生时(在我的主要谓词的最后)。发生这种情况时,我试图找到最大值的列表变量将有一个值(它们是相同的变量,对于上面的示例,我有 Sol=[_#0(0..1), _# 18(0..1),...])。但是代码从未达到这一点,因为当我尝试找到最大值时它会引发错误。

0 投票
1 回答
970 浏览

prolog - 高阶谓词

我之前的问题的后续行动。为什么这行不通?(如果我call([Formula, P, Q])用它代替formula_0(P, Q)它。)

0 投票
2 回答
596 浏览

prolog - 列表上的成对关系

如果列表元素的所有对对于给定关系都为真,则以下高阶谓词成功。这种关系有一个共同的或更好的、更能揭示意图的名称吗?

我取这个名字的最初动机是,在中,通常存在一个all_different/1被描述为真实的约束,如果元素是成对不同的。事实上,宁愿说元素都是不同的,但我经常被纠正(由 Prolog 程序员同行)使用成对不同。事实上,这个约束现在可以最自然地表示为pairwise(#\=, Zs)

正如@aBathologist 观察到的,pairwise 不是正确的词,因为它也可能对非反身有意义Rel

此外,关系Rel不是完全关系,因为call(Rel, X, X)可能会失败,但pairwise(Rel, Xs)仍然可能成功。

我什至为(a->a->Bool)->[a]->Bool. 但是 Hayoo发现了它:namepairwise与 pointwise 不同。

看了MO和数学: