使用Prolog规则在查询中显示给定列表的第一个元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Prolog规则在查询中显示给定列表的第一个元素?相关的知识,希望对你有一定的参考价值。

这是关于范式试卷的一个问题的第二部分,我正在努力解决这个问题,这让我有点难过,但后来我仍然是一个相当的prolog noob所以解决方案可能很明显..

我写了这个规则/事实contains1(X, [X|_]).来检查给定元素是否等于给定列表的头部。这很好,它按预期工作,从我所有的阅读中我可能95%肯定这是最好的方式去做。但后来问题还说是使用此规则编写一个prolog查询来显示给定列表中的第一个元素。

我正在使用swi-prolog来输入和测试我的所有规则等,我知道如何让它显示给定列表的第一个元素的唯一方法是使用查询[H|T] = (some_list)。那么我究竟如何将自己的规则运用到这个......?欢迎任何帮助或正确方向的一点,非常感谢。

答案

让prolog找出X的值使该子句有效:

contains(X, sample_list).

例如,

contains(X, [1, 2, 3]).

将返回X = 1,因为当X = 1,那么该条款是真的。

请记住,当给出这样的子句时,Prolog将尝试查找X的所有值,以使该子句成为真。

以上是关于使用Prolog规则在查询中显示给定列表的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

在prolog中将两个列表映射在一起

列表替换中的 Prolog 元素

Prolog 中的子列表谓词

Prolog:获取包含给定整数的子列表

Prolog约束逻辑编程 - 如何在给定整数列表的情况下在域变量列表上设置域?

是否存在用于回答一般 Prolog 查询的 JSON-RPC 服务器?