⍝ Fold (reduce) from the left:
'abracadabra'{⍺~⍵⊃⍺} foldl 1 2 ⍝ rem all 'a's and all 'r's.
bcdb
'abracadabra'{⍺~⍵⊃⍺} foldl 2 1 ⍝ rem all 'b's and all 'a's.
rcdr
repl←subs⍨ ⍝ ⍺ with ⍵ replacement.
pairs ← ('ny' 'kes')'iu' ⍝ from/to pairs
'many a mickle'repl foldl pairs ⍝ multiple letter replacement.
makes a muckle
0 ,∘⊂⍨ foldl 2 5⍴⍳10 ⍝ higher rank arrays.
┌──┬───────────────┐
│5 │┌─┬───────────┐│
│ ││4│┌─┬───────┐││
│ ││ ││3│┌─┬───┐│││
│ ││ ││ ││2│1 0││││
│ ││ ││ │└─┴───┘│││
│ ││ │└─┴───────┘││
│ │└─┴───────────┘│
├──┼───────────────┤
│10│┌─┬───────────┐│
│ ││9│┌─┬───────┐││
│ ││ ││8│┌─┬───┐│││
│ ││ ││ ││7│6 0││││
│ ││ ││ │└─┴───┘│││
│ ││ │└─┴───────┘││
│ │└─┴───────────┘│
└──┴───────────────┘
scanl←{ ⍝ Dyadic Scan from the left (cf: ##.ascan).
⌽↑⍺⍺{
(⊂(⊃⍵)⍺⍺ ⍺),⍵
}/(⌽⍵),⊂⊂⍺
}
'hello' ⌽⍨ scanl 1 1 0 ¯1 ¯1
┌─────┬─────┬─────┬─────┬─────┬─────┐
│hello│elloh│llohe│llohe│elloh│hello│
└─────┴─────┴─────┴─────┴─────┴─────┘
⍝∇ foldl subs
Back to: code
Back to: Workspaces