【发布时间】:2016-02-20 17:10:51
【问题描述】:
我想解决一个问题,即我有一个 Prolog 元素列表。如果任何元素频率大于N,则返回 false。我的期望如下。
?- frequency([1,2,2,2,5],3).
true.
?- frequency([1,2,2,2,2,5],3).
false.
我有一个获取特定元素频率的代码。对这个问题有任何想法。
count(_, [], 0) :-
!.
count(X, [X|T], N) :-
count(X, T, N2),
N is N2 + 1.
count(X, [Y|T], N) :-
X \= Y,
count(X, T, N).
【问题讨论】:
-
你卡在哪里了?你有没有尝试过实现
frequency/2?蛮力方法(效率不高,但可行)是递归遍历输入列表的每个元素,并检查其在原始列表中的频率(使用您的count/3谓词)与最大值。 -
请更具体!什么是“频率”?
?- frequency([1,2,2,3,2,4],3).应该成功吗??- frequency([1,2,2,3,2,2,2,4],3).呢? -
@luker
count/3给出特定数字的频率。我想取最大频率,它应该小于 4。如何得到它? -
@repect 我的期望是任何大于 3 的频率都返回 false。
?- frequency([1,2,2,3,2,2,2,4],3).这里 2 的频率是 5。和 5>3。那么它将返回 false。
标签: list prolog prolog-dif