gpt4 book ai didi

Prolog - 从列表列表中获取第一个列表

转载 作者:行者123 更新时间:2023-12-02 09:20:39 25 4
gpt4 key购买 nike

我有一个列表,其中包含较小的列表,每个列表包含 2 个项目:

[[a,1],[b,2],[c,3]]  

我正在使用一个名为 take(1,L,R) 的函数从列表 L 中获取第一项并返回项目 R。 take 函数的代码如下:

take(0,X,X).
take(N,[H|T],[H|R]):-
N>0, M is N-1,
take(M,T,R).

目前运行可能如下所示:

1 ?- take(1,[[a],[b],[c]],Taken).
Taken = [[a], [b], [c]]

与输入的内容相同!这对于“常规”1 级深度列表是相同的:

2 ?- take(1,[a,b,c],Taken).
Taken = [a, b, c]

问题:
你的问题是如何使结果看起来像:

1 ?- take(1,[[a],[b],[c]],Taken).
Taken = [a]

我想返回我发送的列表的前 N ​​项。

最佳答案

你的基本情况take(0, X, X).正在做它所说的——给定任何值X,结果是X。我认为你想说的是take(1, [H|T], H). (生成列表的第一个元素)。

我认为你实际上想要的是take(0, _, [ ]).,当从任何列表中“获取”0个项目时,它会产生一个空列表。这非常适合您现有的递归情况。

您说您想要获取“列表的前 N ​​项”——这样的结果必须存储在包含 N 项的列表中。因此 take(1, [a, b, c], Taken) 将产生 Taken = [a],而不是 Taken = a 。同样,take(1, [[a], [b], [c]], Taken). 将产生 Taken = [[a]].。特殊情况下, take(1, ...) 形式仅返回第一项(不将其包装在列表中)会破坏您的递归。

关于Prolog - 从列表列表中获取第一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061025/

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