level 9
0577216
楼主
在stackexchange上看到的一段用以输出重复元素的代码:
deldup[z_] :=
Module[{f},
f[x_, _] := (f[x, q_] := (Sow[q, x]; Unevaluated@Sequence[]); x);
Reap[MapIndexed[f, z], _, Rule]];
deldup[{1, 2, 3, 4, 2, 3, 2}]
给出:{{1, 2, 3, 4}, {2 -> {{5}, {7}}, 3 -> {{6}}}}
代码中f[x_, _] := (f[x, q_] :=...这一句看起来十分奇特,假如把代码改成
deldup[z_] :=
Module[{f}, f[x_, q_] := ((Sow[q, x]; Unevaluated@Sequence[]); x);
Reap[MapIndexed[f, z], _, Rule]];
deldup[{1, 2, 3, 4, 2, 3, 2}]
结果就变成{{1, 2, 3, 4, 2, 3, 2}, {1 -> {{1}}, 2 -> {{2}, {5}, {7}},
3 -> {{3}, {6}}, 4 -> {{4}}}}
想知道"f[x_, _] := (f[x, q_] :=...“到底是怎么工作的?
2013年11月28日 10点11分
1
deldup[z_] :=
Module[{f},
f[x_, _] := (f[x, q_] := (Sow[q, x]; Unevaluated@Sequence[]); x);
Reap[MapIndexed[f, z], _, Rule]];
deldup[{1, 2, 3, 4, 2, 3, 2}]
给出:{{1, 2, 3, 4}, {2 -> {{5}, {7}}, 3 -> {{6}}}}
代码中f[x_, _] := (f[x, q_] :=...这一句看起来十分奇特,假如把代码改成
deldup[z_] :=
Module[{f}, f[x_, q_] := ((Sow[q, x]; Unevaluated@Sequence[]); x);
Reap[MapIndexed[f, z], _, Rule]];
deldup[{1, 2, 3, 4, 2, 3, 2}]
结果就变成{{1, 2, 3, 4, 2, 3, 2}, {1 -> {{1}}, 2 -> {{2}, {5}, {7}},
3 -> {{3}, {6}}, 4 -> {{4}}}}
想知道"f[x_, _] := (f[x, q_] :=...“到底是怎么工作的?