问题标签 [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.
list - Prolog:过滤列表?
我目前正在做一个关于 Prolog 的非常短的项目,只是在尝试将我创建的“过滤器”应用于列表时遇到了困难。我已经准备好你可以称之为过滤器的东西,但我无法应用它。如果我说明一下会更好:
...如果满足某些条件,则输出“真”。
...输出一个列表,其中包含第二个参数中使过滤器输出为false的所有元素。(因此,如果 filter(A, X) 为真,则输出为 [Y, Z] )。
我已经准备好“过滤器”函数,但现在我需要将它应用到列表中,如第二个示例所示,不包括使用第一个参数应用时过滤器返回 true 的所有元素。
因此,如果过滤器是简单的 A == B,则该函数应该接收 A [A,B,A,C,D,A] 并输出 [B,C,D],并删除所有显然,过滤器适用。
我在函数的基本结构上遇到了麻烦,所以如果有人可以为这样的函数提供一个基本的大纲,那将会有很大的帮助。我已经尽可能地简化了我的情况,所以我可以接受你可以提供的任何东西,并根据我的需要进行修改。
提前致谢!
prolog - Prolog中的反向查找?(我如何找到关于 X 的所有真实情况?)
所以,假设我在 Prolog 数据库中有以下内容:
很明显,如果我想列出所有人,我可以输入:
但是,如果我想找到关于约翰的所有真实情况怎么办?我不能做:
但我想要的效果是能够放入“john”并返回“person”和“happy”。
显然还有另一种方式可以存储我的信息:
然后,我可以这样做:
但我在这里失去了一些表现力。我真的很想能够做类似的事情:
有任何想法吗?
谢谢!
prolog - Prolog GNU - Univ 运算符?它的解释
所以univ运算符。我不太明白。
例如这个:
这是在做什么?这看起来看看另一个谓词是否为真。我不明白“..”是做什么的。
如果没有 univ 运算符,你将如何重写它?
prolog - Prolog 过滤自定义目标失败的所有元素的列表
我正在尝试编写一个谓词filter(List, PredName, Result)
来过滤List
目标失败的所有元素,PredName
然后返回Result
列表。谓词PredName/1
应在调用过程时定义filter/3
,例如:
然后可以进行如下查询:
prolog - 将谓词应用于列表元素的 Prolog 映射过程
如何编写map(List, PredName, Result)
将谓词应用于PredName(Arg, Res)
元素List
并在列表中返回结果的 Prolog 过程Result
?
例如:
prolog - 依靠规则秩序
为了计算两个相同长度的列表之间的汉明距离,我使用foldl(hamm, A, B, 0, R).
以下定义hamm/4
:
第一条规则中的剪切防止了不必要的回溯。然而,第二条规则可以用不同的方式写成:
并且对于 A 和 B 都接地的查询hamm2/4
仍然是正确的。foldl/5
那么,是否有充分的理由偏爱其中一个而不是另一个呢?还是有理由保持规则的顺序或改变它们?
我知道查询
是假的,而
是真的,但我不能完全决定哪一个更有意义。. .
prolog - HiLog 术语在现代 Prolog 中仍然有用吗?
Hilog 项(即具有任意项作为函子的化合物)是否仍然被视为 XSB Prolog(或任何其他 Prolog)中的强大功能?目前有很多 XSB 项目使用这个功能吗?例如,他们中的哪一个?
我问,因为据我了解,使用 ISO 内置 call/N 进行高阶编程同样可能。
具体来说,我想了解 XSB 是否只是出于历史原因使用 Hilog 术语,或者与当前的 ISO 标准相比,Hilog 术语是否具有相当大的优势。
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),...])。但是代码从未达到这一点,因为当我尝试找到最大值时它会引发错误。
prolog - 高阶谓词
我之前的问题的后续行动。为什么这行不通?(如果我call([Formula, P, Q])
用它代替formula_0(P, Q)
它。)
prolog - 列表上的成对关系
如果列表元素的所有对对于给定关系都为真,则以下高阶谓词成功。这种关系有一个共同的或更好的、更能揭示意图的名称吗?
我取这个名字的最初动机是,在clpfd中,通常存在一个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和数学: