这是我做的样本考试中的一个问题。
给出 Prolog 谓词 split_into_pairs 的定义,它接受一个列表作为参数,并作为结果返回一个由成对元素组成的列表。例如,split_into_pairs([1,2,3,4,5,6],X)将作为结果返回X=[[1,2],[3,4],[5,6]]。同样,split_into_pairs([a,2,3,4,a,a,a,a],X)将作为结果返回,X=[[a,2],[3,4],[a,a],[a,a]]而split_into_pairs([1,2,3],X)将返回No。
我相信这并不意味着使用内置谓词来完成,但它也不应该太复杂,因为它只值 8/120 分。
我不确定它应该对两个元素的列表做什么,所以我猜要么没有指定它,所以它返回 no,或者split_into_pairs([A,B],[[A,B]]).
我的主要问题是如何正确地进行递归调用,而不需要额外的括号,而不是像X=[[A,B],[[C,D],[[E,F]]]]?。
我最近的尝试是以下代码的变体,但显然这是不正确的。
split_into_pairs([A,B],[A,B])
split_into_pairs([A,B|T], X) :- split_into_pairs(T, XX), X is [A,B|XX]