#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))) ) }