问题:我需要将此列表:[[1,2],[3,4],[5,6]]
转换为[1,3,5]
,只需从第一个列表中的每个子列表中获取第一个项目并创建包含所有子列表的新列表他们语言是 SWI-Prolog 。
我的解决方案:为此,我写了这段代码:
getFirstItems([], Result).
getFirstItems([H|T], Result) :-
[H2|T2] = H,
append(Result,H2,Result2),
getFirstItems(T, Result2).
问题:但当尾总是等于[[5,6]]
问题:如何解决此问题并正确解决此问题?
答案 0 :(得分:3)
你太复杂了。您需要使用声明性思维模型进行推理,从而实现列表列表与第一个元素列表之间的关系。
这是一个解决方案:
first_items([], []).
first_items([[H|_]|T], [H|T2]) :-
first_items(T, T2).
事实上,我们需要陈述的唯一两件事就是:
H
位于第一个元素列表中,后面是列表其余部分(T2
)的第一个元素(T
)。示例查询:
?- first_items([[1,2],[3,4],[5,6]], Z).
Z = [1, 3, 5].
?- first_items(L, [1,3,4]).
L = [[1|_22058], [3|_22070], [4|_22082]].
?- first_items(L, Z).
L = Z, Z = [] ;
L = [[_22048|_22050]],
Z = [_22048] ;
L = [[_22048|_22050], [_22066|_22068]],
Z = [_22048, _22066]
…