gpt4 book ai didi

Prolog - 无限循环

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

我想检查元素是否在列表中间。
我搜索中间元素,然后检查是否是列表的成员,但我得到了无限循环。

我的谓词:

remove_first([_,H1|T], [H1|T]).

remove_last([_],[]).
remove_last([H|T], [H|T2]) :- remove_last(T, T2).

remove_first_and_last([X],[X]).
remove_first_and_last(In, Out) :-
remove_first(In, Out1),
remove_last(Out1, Out).

middle([X], [X]).
middle(In, X) :-
remove_first_and_last(In, Out),
middle(Out, X).

member(X, [X|_]).
member(X, [_|T]) :- member(X, T).

is_middle(X, In) :-
middle(In, Out),
member(X, Out), !.

当我调用 is_middle(1,[2,1,3])然后我就明白了。
但是当我调用 is_middle(1,[2,2,3])然后我没有得到结果。口译员不要中断处理。

最佳答案

is_middle(Item,List) :-
append(Left,[Item|Right],List),
length(Left,X),
length(Right,X).

复杂的解决方案是不好的解决方案,我的 friend 。
?- is_middle(X,[1,2,3,4,5]).
X = 3 ;
false.

完全可逆的谓词:
?- is_middle(3,L).
L = [3] ;
L = [_G13, 3, _G19] ;
L = [_G13, _G19, 3, _G25, _G28] ;

关于Prolog - 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401039/

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