APL ⎕BOX function

Let it all hang out

APL ⎕BOX function

PostPosted by manandpc » Sat Aug 18, 2012 4:41 am

Here is a missing system function ⎕BOX , see APLX language reference documentation
Code: Select all
      ⎕cr'∆BOX'
z←{sep} ∆BOX a;b;c                                             
⍝ {sep} contains: separator {filler}                           
⎕ERROR (1 < ≡a)/'DOMAIN ERROR, Depth > 1 {right argument}'     
⎕ERROR (∧/b ← 0 ' '∊⊤a)/'DOMAIN ERROR, Mixed {right argument}'
⎕ERROR (2 < ⍴⍴a)/'RANK ERROR, {right argument}'               
:if 0 = ∨/b ⋄ b ← 0 ' '∊↑a ⋄ :endif                         
:if 0 = ⎕NC 'sep' ⋄ sep ← b/0 ' ' ⋄ :endif                     
⎕ERROR (1 < ≡sep)/'DOMAIN ERROR, Depth > 1 {left argument}'   
⎕ERROR (∧/c ← 0 ' '∊⊤sep)/'DOMAIN ERROR, Mixed {left argument}'
⎕ERROR (1 < ⍴⍴sep)/'RANK ERROR, {left argument}'               
⎕ERROR (1 2 ∧.≠ ⍴,sep)/'LENGTH ERROR, {left argument}'         
⎕ERROR (b ∨.≠ c)/'DOMAIN ERROR, Different Type'               
sep ← 2↑sep                                                   
                                                               
:if 1 < ⍴⍴a                                                   
z ← ¯1↓∊((1-(sep[⎕IO+1]=a)⊥⍬⍴2⍴1)↓¨⊂[⎕IO+1]a),¨sep[⎕IO]       
:else                                                         
a[c ← ⍸b ← sep[⎕IO] = a ← a,sep[⎕IO]] ← sep[⎕IO+1]             
z ← 0 ¯1↓((⍴c),⌈/c)⍴(1+b\(⌈/c)-c ← ¯1↓(c,0)-0,c ← c+1-⎕IO)/a   
:endif

Examples:
Code: Select all
      ∆BOX 'LEE PRENDERGAST PSMITH'
LEE       
PRENDERGAST
PSMITH     
      TAB←3 6⍴'APL   LISP  PASCAL'
      TAB
APL   
LISP 
PASCAL
      ∆BOX TAB
APL LISP PASCAL
      '*' ∆BOX 'JAN FEB MAR* 1 2 3'
JAN FEB MAR
 1 2 3     
      '/.' ∆BOX 'LEE/PRENDERGAST/PSMITH'
LEE........
PRENDERGAST
PSMITH.....
      '$' ∆BOX TAB
APL$LISP$PASCAL
      NAMETAB←'/.' ∆BOX 'LEE/PRENDERGAST/PSMITH'
      NAMETAB
LEE........
PRENDERGAST
PSMITH.....
      '$.' ∆BOX NAMETAB
LEE$PRENDERGAST$PSMITH
      ∆BOX 1 2 3 0 1 2
 1 2 3
 1 2 0
      ¯1 ¯6 ∆BOX 2 3 4 ¯1 6 ¯1 ¯1 8 2
  2  3  4
  6 ¯6 ¯6
 ¯6 ¯6 ¯6
  8  2 ¯6
manandpc
 
Posts: 67
Joined: Tue Jun 19, 2012 9:39 am

Return to Open Discussion

Who is online

Users browsing this forum: No registered users and 0 guests

cron