procedure comb(integer pool, needed, done=0, sequence chosen={}) if needed=0 then -- got a full set ?chosen -- (or use a routine_id, result arg, or whatever) return end if if done+needed>pool then return end if -- cannot fulfil -- get all combinations with and without the next item: done += 1 comb(pool,needed-1,done,append(chosen,done)) comb(pool,needed,done,chosen) end procedure comb(5,3)