Knuth shuffle: Difference between revisions

no edit summary
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
No edit summary
Line 2,476:
[[File:Knuth_shuffle_panel.png|200px]]
[[File:Knuth_shuffle_diagram.png|200px]]
 
=={{header|Lambdatalk}}==
<lang Scheme>
{def shuffle
{def shuffle.in
{lambda {:a}
{S.map {{lambda {:a :i}
{A.swap :i
{floor {* {random} {+ :i 1}}}
:a}} :a}
{S.serie {- {A.length :a} 1} 0 -1}}}}
{lambda {:a}
{let { {:b {A.duplicate :a}} } // optionnaly prevents modifying the original array
{S.replace \s by in {shuffle.in :b}
:b}}}}
-> shuffle
 
{def A.swap // should probably be promoted as a primitive
{lambda {:i :j :a}
{let { {:i :i}
{:gja {A.get :j :a}}
{:b {A.set! :j {A.get :i :a} :a}}
} {let { {_ {A.set! :i :gja :b} }}}}}}
-> A.swap
 
{def B {A.new a b c d e f g h i j k l m n o p q r s t u v w x y z}}
-> B
 
{shuffle {B}}
-> [z,t,q,w,c,n,a,u,r,y,i,s,f,d,g,m,h,x,b,e,k,p,l,o,j,v]
</lang>
 
=={{header|Lasso}}==