22. Combinations {(⍺=0)∨⍺=⍵:⍉⍪⍳⍺ ⋄ (0,1+(⍺-1)∇ ⍵-1)⍪1+⍺ ∇ ⍵-1} Generate all size m combinations of ⍳n in sorted order. For example, the size 4 combinations of ⍳6 are: 4 comb 6 0 1 2 3 0 1 2 4 0 1 2 5 0 1 3 4 0 1 3 5 0 1 4 5 0 2 3 4 0 2 3 5 0 2 4 5 0 3 4 5 1 2 3 4 1 2 3 5 1 2 4 5 1 3 4 5 2 3 4 5 A doubly-recursive comb can be found in the venerable APL: An Interactive Approach by Gilman and Rose [78], rendered in modern APL as follows: comb←{(⍺=0)∨⍺=⍵:⍉⍪⍳⍺ ⋄ (0,1+(⍺-1)∇ ⍵-1)⍪1+⍺ ∇ ⍵-1} Like other multiply-recursive functions, this definition suffers from poor performance. The performance can be greatly improved by use of the memo operator from Chapter 16. comb M provides a good balance between simplicity and efficiency. A faster comb is possible without memo, but it’s not easy. For example, from [49d]: comb87←{ (⍺=0)∨⍺=⍵:⍉⍪⍳⍺ (c/k),⊃⍪⌿(-c)↑¨⊂1+(⍺-1)∇(⍵-1) ⊣ c←(⍺-1)!(⍺-1)+⌽k←⍳1+⍵-⍺ } |