prolog - 学习序言,一些列表函数

标签 prolog

我正在做一项处理 prolog 中的列表的作业。基本思想是给定一个列表,prolog 应该能够确定一个值是否完全重复、只重复一次或只重复两次等。我认为最简单的解决方案是计算一个值出现的次数然后使用该计数来确定重复了多少次。

list_count([],X,0).
list_count([X|T],X,Y) :- list_count(T,X,Z), Y is 1 + Z.
list_count([X1|T],X,Z) :- X1 \= X, list_count(T,X,Z).

repeated_in(+E,+List) :- list_count(List,E,Num), Num >= 2.

尽管我的第一个谓词总是失败,但无论我做什么。帮忙?

最佳答案

list_count/3 确实有效。我认为唯一的问题是前缀 '+' 的不当使用:尝试

% repeated_in(+E,+List)
repeated_in(E,List):- list_count(List,E,Num), Num >= 2.

注意:前缀参数用于文档目的,作为关于模式用法的回顾

关于prolog - 学习序言,一些列表函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196003/

相关文章:

recursion - Prolog:以递归方式使用 =../2 (Univ)

list - Prolog - 列表包含 2x 元素 X

loops - 序言,无限循环

prolog - 在序言中转置矩阵

Prolog 和 headless 含义

prolog - map 列表错误?

prolog - "Not"在 Prolog 中如何工作?

prolog - 在序言中获取单例警告(面额更改)

prolog - 制作适用于 GNU 和 SWI 的 Prolog 代码

prolog - 获取子句的其余部分作为列表并创建列表列表