Knuth shuffle: Difference between revisions
Content added Content deleted
Line 4,911: | Line 4,911: | ||
:DelVar D |
:DelVar D |
||
:Return |
:Return |
||
=={{header|Transd}}== |
|||
<syntaxhighlight lang="Scheme">#lang transd |
|||
MainModule: { |
|||
// Define an abstract type Vec to make the shuffling |
|||
// function polymorphic |
|||
Vec: typedef(Lambda<:Data Bool>(λ d :Data() |
|||
(starts-with (_META_type d) "Vector<"))), |
|||
kshuffle: (λ v Vec() locals: rnd 0 |
|||
(for n in Range( (- (size v) 1) 0) do |
|||
(= rnd (randr (to-Int n))) |
|||
(with tmp (cp (get v n)) |
|||
(set-el v n (get v rnd)) |
|||
(set-el v rnd tmp)) |
|||
) |
|||
(lout v) |
|||
), |
|||
_start: (λ |
|||
(with v [10,20,30,40,50,60,70,80,90,100] |
|||
(lout "Original:\n" v) |
|||
(lout "Shuffled:") |
|||
(kshuffle v)) |
|||
(lout "") |
|||
(with v ["A","B","C","D","E","F","G","H"] |
|||
(lout "Original:\n" v) |
|||
(lout "Shuffled:") |
|||
(kshuffle (cp v)) |
|||
// Transd has a built-in function that performs the same |
|||
// kind of random shuffle |
|||
(lout "Built-in shuffle:") |
|||
(lout (shuffle v))) |
|||
) |
|||
}</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Original: |
|||
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] |
|||
Shuffled: |
|||
[20, 60, 100, 80, 70, 10, 50, 90, 40, 30] |
|||
Original: |
|||
["A", "B", "C", "D", "E", "F", "G", "H"] |
|||
Shuffled: |
|||
["G", "A", "D", "B", "F", "E", "C", "H"] |
|||
Built-in shuffle: |
|||
["A", "E", "C", "H", "G", "F", "B", "D"] |
|||
</pre> |
|||
=={{header|TUSCRIPT}}== |
=={{header|TUSCRIPT}}== |