2016-11-21 47 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)不允許有空列表。如果是這樣的話,可能會產生一個合理的解決方案。 –