gpt4 book ai didi

list - 删除列表的中间元素

转载 作者:行者123 更新时间:2023-12-03 07:32:24 25 4
gpt4 key购买 nike

我想编写一个 Prolog 程序,将奇数列表中的中间元素删除到另一个列表中。
例如,如果我们给出:delete_mid([1,2,3,4,5],L)那么它会产生:L = [1,2,4,5]作为答案。

最佳答案

我很惊讶也有点难过,到目前为止,这两个答案都没有采用最明显的方法;你肯定在学校听说过它(我怀疑这可能是 OP 应该做的)。
然而,解释或立即做有点困难,所以首先,这是一个找到中间元素的谓词:

list_mid([H|T], Mid) :-
list_mid_1(T, T, H, Mid).

list_mid_1([], _, Mid, Mid).
list_mid_1([_,_|Fast], [S|Slow], _, Mid) :-
list_mid_1(Fast, Slow, S, Mid).
我希望名字是显而易见的。
?- list_mid([], Mid).
false.

?- list_mid([x], Mid).
Mid = x.

?- list_mid([a,x,b], Mid).
Mid = x.

?- list_mid([a,a,x,b,b], Mid).
Mid = x.

?- list_mid([a,a,x,b], Mid).
false.
似乎工作。现在,我可以尝试添加部分,以保留它目前扔掉的东西。

我很忙,所以这花了一段时间。同时, the answer by Raubsauger这正是我的想法。我没有看到它,而是写了这个:
delete_mid([H|T], L) :-
delete_mid_1(T, T, H, L).

delete_mid_1([], Rest, _, Rest).
delete_mid_1([_,_|Fast], [H|Slow], Prev, [Prev|Back]) :-
delete_mid_1(Fast, Slow, H, Back).
它不像 Raubsauger 的解决方案那么简洁,但在其他方面似乎是相同的解决方案。它通过@false 终止测试用例。

我以为 list_middle/2谓词就足够了;我再次感到惊讶和悲伤,因为只有 Raubsauger 看到了(或者已经知道了)。

Und täglich grüßt das Murmeltier

关于list - 删除列表的中间元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64692632/

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