1
 2
 3
 4
 5
 6
 7
 8
 9
10
function cp(lists){
  if (size(lists) == 0){
    yield {}
  } else {
    for (lss : cp(lists[1..])){
      for (ls : lists[0]) yield {ls} + lss
    }
  }
}
printAll(cp([{1,2,3,4}, "abc"]))