对于我的生活,我无法弄清楚这个permute函数如何恰恰工作。序言 - 这个置换函数是如何工作的?
perm(L, [H|T]) :-
append(V, [H|U], L),
append(V,U,W),
perm(W,T).
perm([],[]).
它看起来对我来说,第一个追加需L的最后一个元素,并与H.结合它然后内烫发调用的置换其他元素,并与T.结合他们,我只是不知道是什么第二个追加函数呢。我知道没有它,每一次尝试找到一个新的解决方案都会将列表大小减少1,但我无法解释这种行为。
您是否尝试过使用跟踪? (运行:trace,perm([1,2,3],X)ex) – user1018513 2014-10-21 21:15:06
试着去考虑它*关系*不*功能* ... *'[H | T]'是L的置换'如果'L'是附加到'V'和... *的'[H | U]'。而*'[]'是'[]'*的排列组合。 – lurker 2014-10-21 21:21:07
是的,很多次。这仍然让我感到困惑。说我输入烫发([1,2,3],X)。最后3条曲线将显示给我: 退出:(8)perm([1],[1])?蠕变 退出:(7)perm([1,2],[2,1])?蠕变 退出:(6)perm([1,2,3],[3,2,1])?蠕变 看起来像它奇迹般地创造了我的排列。 – 2014-10-21 21:22:11