如何在prolog中编写unflatten函数?

时间:2016-11-21 01:20:02

标签: algorithm debugging prolog computer-science

我想出的解决方案是检查左侧和右侧,以确保左侧是扁平的,右侧是所有可能的分区。

当我检查双嵌套元素时,分区的等式有一些错误。

unflatten([],[]) :- !.
unflatten(flatList, [l1|lst]) :- !, unflatten(A, l1), unflatten(B, lst), append(A,B, flatList).
unflatten([l1|flatList], [l1]|lst]) :- unflatten(flatlist,lst).
unflatten([l1,l2|flatList], [[l1,l2]|lst]) :- !, unflatten(flatList,lst).
unflatten( [flatList],flatList):- !.

1 个答案:

答案 0 :(得分:0)

执行unflatten(与flatten的反向)似乎是一件奇怪的事情,因为有无数可能的解决方案。例如,unflatten([1, 2, 3, 4], A)不仅需要将A[[1], [2, 3, 4]][[1], [2], 3, 4][[1, 2], [3], 4]等统一起来,还需要与此类怪物统一:< / p>

 [[[[[[[[[[]]]]]]]]], [[[[[[[[[[[1]]]]]]]]]], 2, 3, 4]

因此,要么你对可能解决方案的领域有进一步的限制,要么我甚至在努力构思一种策略,这种策略会返回平坦的有用逆转,并且仍然可以在这样的无限域上完成。我愿意被证明是错的,但是......