2016-11-21 122 views
1

我提出的解决方案检查左侧和右侧,确保左侧平整,右侧适合所有可能的分区。如何在prolog中编写unflatten函数?

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

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

我开始认为这是一个学术活动,你们必须做:)今天在第二个新的人在stackoverflow要求同样的事情。如果这是真的,你们似乎很不道德......见http://stackoverflow.com/questions/40709840/how-to-create-the-flatten-equation-in-prolog/40710166#40710166 –

回答

0

的unflatten的实现(作为一个扁平化的反向)似乎是一个奇怪的事情,因为有可能的解决方案无限多。例如,unflatten([1, 2, 3, 4], A)将不仅需要统一A[[1], [2, 3, 4]][[1], [2], 3, 4][[1, 2], [3], 4]等,而且还与怪物像这样:

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

因此,无论你有可能的解决方案领域的进一步限制,或者我正在努力构思一种能够返回平坦化的有用逆转的策略,并且仍然可以在这样的无限领域完成。我愿意被证明是错误的,虽然...

+0

这有点正确,但A是列表列表,而不是列表和元素或列表或空列表。 –

+0

@WoofWarrior同样的事情,因为你可以有空的列表...除非你强迫类似的东西,(i)所有元素都是列表,(ii)不允许有空列表。如果是这样的话,可能会产生一个合理的解决方案。 –