Prolog 列表转换

Prolog 列表转换,prolog,flatten,gnu-prolog,Prolog,Flatten,Gnu Prolog,我是prolog的新手,我正在尝试将列表展平,如下所示: X = [[[0,0,1],[1,0,2]],[[0,1,3],[0,2,2]],[[0,3,5],[0,4,4]],[[0,5,4],[0,6,5]]] 所需输出为: X = [[0,0,1],[1,0,2],[0,1,3],[0,2,2],[0,3,5],[0,4,4],[0,5,4],[0,6,5]] 我如何才能做到这一点?使用递归:-) 然后查询: ?-MyFlatte([[0,0,1],[1,0,2],[[0,1,3],[0

我是prolog的新手,我正在尝试将列表展平,如下所示:

X = [[[0,0,1],[1,0,2]],[[0,1,3],[0,2,2]],[[0,3,5],[0,4,4]],[[0,5,4],[0,6,5]]]
所需输出为:

X = [[0,0,1],[1,0,2],[0,1,3],[0,2,2],[0,3,5],[0,4,4],[0,5,4],[0,6,5]]
我如何才能做到这一点?

使用递归:-)

然后查询:


?-MyFlatte([[0,0,1],[1,0,2],[[0,1,3],[0,2,2],[[0,3,5],[0,4,4],[[0,5,4],[0,6,5]],X)。

这里有一条简单的经验法则:每当你在程序中看到
.[
时,你可以用
替换它。myflatten头部的第二个参数因此可以用
[code>[B]代替
myflatten([], []).
myflatten([[A, B]|T], [A|[B|FlattenedT]]) :- myflatten(T, FlattenedT).