我想出的解决方案是检查左侧和右侧,以确保左侧是扁平的,右侧是所有可能的分区。
当我检查双嵌套元素时,分区的等式有一些错误。
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):- !.
答案 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]
因此,要么你对可能解决方案的领域有进一步的限制,要么我甚至在努力构思一种策略,这种策略会返回平坦的有用逆转,并且仍然可以在这样的无限域上完成。我愿意被证明是错的,但是......