1
我试图弄清楚一段时间,但我没有成功。 下面的函数(powerset)如何进行详细的说明,以[1,2,3]为例输入参数? 非常感谢您的帮助。 (fn xs => x :: xs)tl)[[]] L;其中,sml foldl解释/跟踪
我试图弄清楚一段时间,但我没有成功。 下面的函数(powerset)如何进行详细的说明,以[1,2,3]为例输入参数? 非常感谢您的帮助。 (fn xs => x :: xs)tl)[[]] L;其中,sml foldl解释/跟踪
要正确使用此功能,您必须假定输入列表中不存在重复。
[[]]
)的: 该函数可以如下理解。
x
中,并将这些结果添加到累加器中。n
元素,即powerset。容易被明示的痕迹,让我们创建一个辅助功能f
fun f (x, tl) = tl @ map (fn xs => x::xs) tl
现在我们有了一丝[1, 2, 3]
:
ps [1, 2, 3]
~> foldl f [[]] [1, 2, 3] (* Step 1 *)
~> foldl f (f (1, [[]])) [2, 3]
~> foldl f ([[]] @ map (fn xs => 1::xs) [[]]) [2, 3]
~> foldl f [[], [1]] [2, 3] (* Step 2 *)
~> foldl f (f (2, [[], [1]])) [3]
~> foldl f ([[], [1]] @ map (fn xs => 2::xs) [[], [1]]) [3]
~> foldl f [[], [1], [2], [2, 1]] [3] (* Step 3 *)
~> foldl f (f (3, [[], [1], [2], [2, 1]])) []
~> foldl f ([[], [1], [2], [2, 1]] @ map (fn xs => 3::xs) [[], [1], [2], [2, 1]]) []
~> foldl f [[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]] [] (* Step 4 *)
~> [[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]] (* Final result *)
谢谢各位大大为你的时间,垫! – Givanovitch
不客气。很高兴我能帮上忙。 – pad