APLish

Richard Suchenwirth 2001-01-17 - When playing APL in Tcl, I wanted to display the real APL symbols (which are sometimes very special). Hunting the web for transliterations between APL and ASCII, I soon found Jim Weigang's APLASCII [1 ] which looked good to me: he represents any NON-ASCII characters with braced strings. Here's my initial and incomplete converter - it will grow over time, but if you desperately need it, just grab it now ;-) If called with no arguments aplish performs a little self-test.

A free TrueType font, "SImPL", with APL and many alphabet signs, can be downloaded at [2 ].

 proc aplish {{s {}}} {
    if {$s==""} {
        set s "L{<-}(L{iota}':'){drop}L{<-},L @ x{epsilon}y{and}z>0"
    }
    regsub -all {\{\{} $s \x81 s ;# protect double braces
    regsub -all {\}\}} $s \x82 s
    foreach {a u} {
        <-    \u2190
        ->    \u2192
        <=    \u2264
        >=    \u2265
        /=    \u2260
        and   \u22C0
        delta \u0394
        drop  \u2193
        epsilon \u220a
        iota \u03b9
        max  \u2308
        min  \u230A
        neg  \u203e
        or   \u22C1
        rho  \u03C1
        rotate \u233d
        take \u2191
    } {
        regsub -all "\\{$a\\}" $s $u s
    }
    regsub -all @ $s \u235d  s
    regsub -all {\x81} $s \{ s
    regsub -all {\x82} $s \} s
    set s
 }

See The Lish family for more natural language converters, and An APL playstation where APLish is used.

AMG I put an extra set of braces around the argument list. "proc {s {}} {...}" means two arguments named s and {}, the second of which is considered illegal due to being an empty string. (Why?) But we want instead for the empty string to be s's default value. For this usage proc should get an argument list with one element which is itself a list of two elements, s and {}. RS: Oops, yes.. thanks! I've had that before: first I developed code, tested it, wikified it; then I later thought of another feature, tested it locally, and if satisfied, manually edited it into the Wiki page - and did not test again what I've done there. Sorry!