如果你不介意的遞歸解決方案,你可以這樣做:
to-report permutations [#lst] ;Return all permutations of `lst`
let n length #lst
if (n = 0) [report #lst]
if (n = 1) [report (list #lst)]
if (n = 2) [report (list #lst reverse #lst)]
let result []
let idxs n-values n [?]
foreach idxs [
let xi item ? #lst
foreach (permutations remove-item ? #lst) [
set result lput (fput xi ?) result
]
]
report result
end
編輯:響應評論更新語法。
to-report permutations [#lst] ;Return all permutations of `lst`
let n length #lst
if (n = 0) [report #lst]
if (n = 1) [report (list #lst)]
if (n = 2) [report (list #lst reverse #lst)]
let result []
let idxs range n
foreach idxs [? ->
let xi item ? #lst
foreach (permutations remove-item ? #lst) [?? ->
set result lput (fput xi ??) result
]
]
report result
end
fwiw,http://rosettacode.org/wiki/Permutations提供了許多編程語言的解決方案。可能計劃一將是最容易移植到NetLogo的 –