【发布时间】:2016-02-04 14:07:10
【问题描述】:
我必须从 Prolog 的列表中删除最长的素数序列。 我是 Prolog 的新手,我找不到达到最长序列的方法...... 这是我到目前为止所做的:
divisible(X,Y):-
0 is X mod Y.
divisible(X,Y):-
X > Y + 1,
divisible(X,Y+1).
is_prime(2).
is_prime(3).
is_prime(P):-
integer(P),
P>3,
P mod 2 =\= 0,
not(divisible(P,3)).
这个从列表中删除素数..
removeP([],[]).
removeP([H],[H]):-
not(is_prime(H)).
removeP([H|T],[H|L]):-
not(is_prime(H)),
removeP(T,L).
removeP([H|T],L):-
is_prime(H),
removeP(T,L).
在这里我试图找到最长的序列,但我不知道下一步该做什么
longest([],[]).
longest([H],[H]):-
is_prime(H).
longest([H],[]):-
not(in_prime(H)).
longest([H|T],L):-
....
【问题讨论】:
-
请提供一些示例查询以及您期望的答案。
-
我假设您对子序列不感兴趣,但对子列表感兴趣。 cf en.m.wikipedia.org/wiki/Subsequence 与 en.m.wikipedia.org/wiki/Substring .
-
例如,如果我有列表 [1, 3, 5, 4, 2, 5, 7, 8],结果列表将是 [1, 3, 5, 4, 8]因为 [2,5,7] 是最长的。
-
好的。如果列表是
[1,3,5,4, 2,5,7, 8, 2,5,7, 9]怎么办?是否应该同时删除[2,5,7]的出现? -
我想应该把它们全部删除..如果大小相同。