gpt4 book ai didi

prolog - 你如何在列表中找到丢失的号码?

转载 作者:行者123 更新时间:2023-12-02 07:08:29 24 4
gpt4 key购买 nike

假设我有一个列表 [1,2,4,5],我想要一个返回 3 作为缺失元素的谓词。您可以假设输入列表始终按顺序排序。

到目前为止我的解决方案:

% missing_number/2 (ListToBeChecked, ListToBeCompared, MissingNum)
missing_number([], [], []) :- !.
missing_number([Head | Tail], [Head | Rest], Number) :-
missing_number(Tail, Rest, Number).
missing_number(_, [X | _], [X | Node]) :-
missing_number(_, _, Number), !.

最佳答案

使用 between/3 生成从最小值到最大值的所有数字。使用 memberchk/2(或 member/2)找到丢失的部分。

L = [1,2,4,5],
L = [M|_],
last(L, N),
between(M, N, I),
\+ memberchk(I, L).

读者练习:用谓词将其包装起来。

编辑 有效的解决方案,应大众要求:

missing([I,K|_], M) :-
I1 is I+1,
K1 is K-1,
between(I1, K1, M).
missing([_|Ns], M) :-
missing(Ns, M).

编辑 2:上面的更优雅的版本,灵感来自@chac,不一定非常有效:

missing(L,M) :- append(_, [I,J|_], L), I1 is I+1, J1 is J-1, between(I1,J1,M).

关于prolog - 你如何在列表中找到丢失的号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423308/

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