我已经看到这个问题在 C# 和其他语言中得到解决,但在 Smalltalk 中却没有得到解决。我有3个集合,例如:
a := #(3 4 5).
b := #(4 1 2).
c := #(5 2 3).
我需要做出所有可能的组合,i。即:
#(3 4 5)
#(3 4 2)
#(3 4 3)
#(3 1 5)
#(3 1 2)
#(3 1 3)
#(3 2 5)
#(3 2 2)
#(3 2 3)
#(4 4 5)
...
我在 Squeak 和 Pharo 中看到有组合:atATimeDo: 但我不知道如何在这种情况下使用它。这不是家庭作业。有什么帮助吗?
这有点神秘,但很短。它将块用作匿名函数(某种程度上,它仍然需要从变量引用,以便可以递归调用)。
| expand |
expand := [ :prefix :lists |
lists isEmpty
ifTrue: [ Array with: prefix ]
ifFalse: [ | tail |
tail := lists allButFirst: 1.
lists first inject: #() into: [ :all :each |
all, (expand value: (prefix copyWith: each) value: tail) ] ] ].
expand value: #() value: #((3 4 5)(4 1 2)(5 2 3))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)