这是我做的样本考试中的一个问题。
给出 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]