Posted to tcl by Zarutian at Fri Nov 16 02:43:42 GMT 2007view pretty

proc create {deck} {
  set cards ""
  foreach type {S H D C} {
    foreach value {A 2 3 4 5 6 7 8 9 10 J Q K} {
      lappend cards [set value][set type]
    }
  }
  set j 52
  while true {
    set r [expr rand()]
    set k [expr int(($j * $r) + 1)]
    set t1 [lindex $cards [expr $k -1]]
    set t2 [lindex $cards [expr $j -1]]
    lset cards [expr $j -1] $t1
    lset cards [expr $k -1] $t2
    incr j -1
    if {$j > 1} {
      continue
    } else {
      break
    }
  }
  upvar $deck d
  set d $cards
}