gpt4 book ai didi

list - 检查列表是否是回文。如果没有,插入元素使其成为回文。 (序言)

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

我写了下面的代码来检查它是否是回文。我还创建了在列表不是回文式时插入元素的逻辑

reverse_list(Inputlist, Outputlist) :-
reverse(Inputlist, [], Outputlist).

reverse([], Outputlist, Outputlist).
reverse([Head|Tail], List1, List2) :-
reverse(Tail, [Head|List1], List2).

printList([]).
printList([X|List]) :-
write(X),
write(' '),
printList(List).

palindrome(List1) :-
reverse_list(List1, List2),
compareLists(List1, List1, List2, List2).

compareLists(L1, [], [], L2) :-
write("\nList is Palindrome").
compareLists(L1, [X|List1], [X|List2], L2) :-
compareLists(L1, List1, List2, L2),
!.
compareLists(L1, [X|List1], [Y|List2], [Z|L2]) :-
write("\nList is not Palindrome. "),
append(L1, L2, L),
printList(L).

该代码给出了正确的输出
palindrome([a,b,c,a]).
List is not Palindrome. a b c a c b a

palindrome([a,b,c]).
List is not Palindrome. a b c b a

但是,对于诸如
palindrome([a,b,c,b]).
List is not Palindrome. a b c b c b a

然而,最佳解决方案应该是
 a b c b a

为了实现此目标,我应该进行哪些更改?

最佳答案

我认为您需要一个带有两个Args的谓词In和Out:

pal([], []).
pal([X], [X]).
pal(In, Out) :-
% first we check if the first and last letter are the same
( append([H|T], [H], In)
% we must check that the middle is a palindrome
-> pal(T, T1),
append([H|T1], [H], Out)
; % if not, we remove the first letter
% and we work with the rest
In = [H|T],
% we compute the palindrome from T
pal(T,T1),
% and we complete the palindrome to
% fit the first letter of the input
append([H|T1], [H], Out)).

EDIT1
这段代码看起来不错,但是有一个错误
? pal([a,b,c,a], P).
P = [a, b, c, b, a] .

应该是[a,b,c,a,c,b,a]
我会尝试修复它。

EDIT2
看起来正确:
build_pal([H|T], Out):-
pal(T,T1),
append([H|T1], [H], Out).


pal([], []).
pal([X], [X]).
pal(In, Out) :-
( append([H|T], [H], In)
-> pal(T, T1),
( T = T1
-> append([H|T1], [H], Out)
; build_pal(In, Out))
; build_pal(In, Out)).

与输出:
 ?- pal([a,b,c], P).
P = [a, b, c, b, a] .

?- pal([a,b,a], P).
P = [a, b, a] .

?- pal([a,b,c,b], P).
P = [a, b, c, b, a] .

?- pal([a,b,c,a], P).
P = [a, b, c, a, c, b, a] .

?- pal([a,b,a,c,a], P).
P = [a, b, a, c, a, b, a] .

关于list - 检查列表是否是回文。如果没有,插入元素使其成为回文。 (序言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571259/

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