⍝ List from vector ⍵: list'hello' ┌─┬──────────────┐ │h│┌─┬──────────┐│ │ ││e│┌─┬──────┐││ │ ││ ││l│┌─┬──┐│││ │ ││ ││ ││l│o∘││││ │ ││ ││ │└─┴──┘│││ │ ││ │└─┴──────┘││ │ │└─┴──────────┘│ └─┴──────────────┘ 0 {⍺+1} ltrav list'hello' ⍝ length of list. 5 length←0∘({⍺+1} ltrav) ⍝ ditto length list ⎕a 26 vect←⍬∘({⍺,⊂⍵} ltrav) ⍝ vector from list. vect list 'hello' hello {⍵≡vect list ⍵},\⎕a ⍝ nested argument vector. 1 revl←'∘'∘({⍺ ⍵}⍨ ltrav) ⍝ reverse of list. vect revl list 'hello' olleh rmdups←{ ⍝ remove adjacent duplicates. ⍺←'∘' ⍝ null accumulator. (a(b tail))←⍵ ⍝ first two items. b≡'∘': revl a ⍺ ⍝ b null: list expired. a≡b:⍺ ∇ b tail ⍝ two items match: drop first one. a ⍺ ∇ b tail ⍝ accumulate first, continue. } vect rmdups list'Mississippi' Misisipi parse←{ ⍝ Right-to-left lambda expr parser. ↑{ ⍝ ⎕←⍺'│'⍵ ⍝ (uncomment to see trace). (toks a)(b(c accs))←⍺ ⍵ ⍝ a│b c : a│b c 3-item window. '⊣'≡a:b ⍝ ⊣│* : * finished '()'≡a c:toks ∇ b accs ⍝ (│* ) : │* · '(→'≡a b:⍺ ∇ c accs ⍝ (│→ * : (│*· · '→→'≡a b:toks ∇ ⍵ ⍝ →│→ * : │→ * '→'≡b:toks ∇ b(('→'a c)accs) ⍝ v│→ b : │→ v→b lambda node. '→)'≡a c:toks ∇ a ⍵ ⍝ →│* ) : │→ * ) a∊'→(':⍺ ∇('@'b c)accs ⍝ (│f a : (│fa apply node. toks ∇ a ⍵ ⍝ *│* · : │* * }/↑{⍺ ⍵}⍨/⌽'⊣(',⍵,')' ⍝ parse of token list ⍵. } ∆CY←{ ⍝ Extension-tolerant ⎕CY. 6:: ⍝ :-( no result from ⎕CY. 11:: ⍺ ⎕CY ⍵ ⍝ try to copy from 'wsid' only ⍺ ⎕CY ⍵,'.dws' ⍝ if can't find 'wsid.dws'. } 'trees'∆CY'min' ⍝ borrow Min's expression tree display. trees parse '(t→ttt)(fx→f(fx))+0' ⍝ parse tree for lambda expression. ┌─@┐ ┌──@┐ 0 ┌────@─┐ + ┌→──┐ ┌→─┐ t ┌─@┐ f ┌→─┐ ┌@┐ t x ┌@─┐ t t f ┌@┐ f x ⍝∇ list ltrav Back to: code Back to: Workspaces