* Library for random() -include 'Random.sno' * # String -> array define('s2a(str,n)i') :(s2a_end) s2a s2a = array(n); str = str ' ' sa1 str break(' ') . s2a span(' ') = :s(sa1)f(return) s2a_end * # Array -> string define('a2s(a)i') :(a2s_end) a2s a2s = a2s a ' ' :s(a2s)f(return) a2s_end * # Knuth shuffle in-place define('shuffle(a)alen,n,k,tmp') :(shuffle_end) shuffle n = alen = prototype(a); sh1 k = convert(random() * alen,'integer') + 1 eq(a,a) :s(sh2) tmp = a; a = a; a = tmp sh2 n = gt(n,1) n - 1 :s(sh1) shuffle = a :(return) shuffle_end * # Test and display a = s2a('1 2 3 4 5 6 7 8 9 10',10) output = a2s(a) '->' shuffle(a) output = a2s(a) end