【发布时间】:2014-10-21 21:06:54
【问题描述】:
对于我的生活,我无法弄清楚这个置换函数是如何准确工作的。
perm(L, [H|T]) :-
append(V, [H|U], L),
append(V,U,W),
perm(W,T).
perm([],[]).
在我看来,第一个 append 获取 L 的最后一个元素并将其与 H 统一。然后内部 perm 调用置换其他元素并将它们与 T 统一。我只是不确定第二个 append 函数的作用.我知道如果没有它,每次寻找新解决方案的尝试都会将列表大小减少 1,但我无法解释这种行为。
【问题讨论】:
-
您是否尝试过使用跟踪? (运行:trace, perm([1,2,3],X) for ex)
-
试着考虑关系而不是功能...
[H|T]是L的排列如果L是[H|U]附加到V和...。而[]是[]的排列。 -
是的,很多次。这对我来说仍然很困惑。假设我输入 perm([1,2,3],X)。最后 3 条痕迹会告诉我: Exit: (8) perm([1], [1]) ?蠕变出口:(7) perm([1, 2], [2, 1]) ?蠕变出口:(6) perm([1, 2, 3], [3, 2, 1]) ?看起来像是神奇地为我创造了排列的cree。
标签: list prolog permutation