gpt4 book ai didi

list - 序言中最长的序列

转载 作者:行者123 更新时间:2023-12-04 21:37:57 24 4
gpt4 key购买 nike

我必须从 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):-
....

最佳答案

图书馆,特别是 aggregate ,有助于利用不确定性:

remove_longest(Pred, L, R) :-
aggregate(max(C,Xc/Yc), P^(append([Xc,P,Yc],L), maplist(Pred,P), length(P,C)), max(C,X/Y)),
append(X, Y, R).

谓词(is_prime 对于您的情况)是通用的。在此示例运行中,我仅使用原子“a”的标识:
?- remove_longest(=(a), [1,2,3,a,a,4,5,a], R).
R = [1, 2, 3, 4, 5, a].

关于list - 序言中最长的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33515769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com