This is called "ranking" and is very simple in APL:
⍋⍋'GNUAPL'
2 4 6 1 5 3
The permutations 4 1 6 2 5 3 (i.e. ⍋'GNUAPL') and 2 4 6 1 5 3 are inverses
of each other, and ⍋ will invert a permutation.
Jay.
On 17 October 2016 at 15:41, Ala'a Mohammad <[email protected]> wrote:
> Hi Juergen,
>
> Thanks for the fix.
>
> Apology if I could not explain what I'm trying to do. It is: given a
> string, replace every char with its alphabetic index (starting from
> 1). The following simpler solution achieves it.
>
> ⊢string ←'GNUAPL'
> GNUAPL
> ⊢string[⍋string] ← ⍳⍴string
> 1 2 3 4 5 6
> string
> 2 4 6 1 5 3
>
> but now 'string' is overwritten. Then i tried to generalize it, thus
>
> {str⊣str[⍋str]←⍳⍴str←⍵} 'GNUAPL'
> 2 4 6 1 5 3
>
> but now I need '⊣', otherwise the returned result will be the ordered iota.
>
> I tried to understand why it returns 1 2 3 4 5 6 (without ⊣), but
> failed! Any hints/references?
>
> Thanks again for the fix.
>
> Ala'a
>
>
> On Mon, Oct 17, 2016 at 2:34 PM, Juergen Sauermann
> <[email protected]> wrote:
> > Hi Ala'a
> >
> > thanks, fixed in SVN 798.You will now get a DOMAIN ERROR instead of
> > a failed assertion.
> >
> > The DOMAIN ERROR is being reported because you try to compare objects
> that
> > would be called left values in C/C++, so your code is also wrong. I would
> > also
> > be careful with using A⍳B if A or B becomes large. For regular structures
> > like
> >
> > abc←'abcdefghijklmnopqrstuvwxyz'
> > abc⍳XXX
> >
> > you might consider using something like
> >
> > 0 ⌈ 26 ⌊ ¯97 + ⎕UCS XXX
> >
> > which will decrease your execution time from O((⍴A)×(⍴B)) down to O(⍴B).
> >
> > /// Jürgen
> >
> >
> >
> > On 10/16/2016 04:51 PM, Ala'a Mohammad wrote:
> >
> > I was trying to assign order to a word letters for example 'zach' is
> > 312, I got it finally, for example for 'maine'
> > abc←'abcdefghijklmnopqrstuvwxyz'
> > 1+(⌽⍳5)[(⍋abc⍳'maine')]
> > 4 1 3 5 2
> >
> > But I got the following failing assertion and wanted to check if
> > something related to my code or the interpreter.
> > I'm using
> > GNU APL
> > : apl -v
> > BUILDTAG:
> > ---------
> > Project: GNU APL
> > Version / SVN: 1.6 / 796
> > Build Date: 2016-09-26 18:43:22 UTC
> > Build OS: Linux 3.13.0-37-generic x86_64
> > config.status: unknown configure options
> > Archive SVN: 787
> >
> > Operating system is Linuxmint 17.1 64bit (Linux rock 3.13.0-37-generic
> > #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64
> > GNU/Linux)
> >
> > Regards,
> >
> > Ala'a
> >
> > ------------------------------------------------------------
> ---------------------------
> >
> > abc←'abcdefghijklmnopqrstuvwxyz'
> > abc⍳'maine'
> > 12 0 8 13 4
> > ⍋abc⍳'maine'
> > 1 4 2 0 3
> > (⍋abc⍳'maine')←⍳5
> > equal() called on object of classLvalCell
> >
> > ============================================================
> ==================
> > Assertion failed: 0
> > in Function: equal
> > in file: Cell.cc:117
> >
> > Call stack:
> >
> > ----------------------------------------
> > -- Stack trace at Cell.cc:117
> > ----------------------------------------
> > 0x7fb94a6e9f45 __libc_start_main
> > 0x446105 main
> > 0x56b84d Workspace::immediate_execution(bool)
> > 0x487e89 Command::process_line()
> > 0x487f2d Command::do_APL_expression(UCS_string&)
> > 0x4923c8 Executable::execute_body() const
> > 0x5201b0 StateIndicator::run()
> > 0x4c57e9 Prefix::reduce_statements()
> > 0x4c4d59 Prefix::reduce_MISC_F_B_()
> > 0x460d8f Bif_F12_SORT_ASC::eval_B(Value_P)
> > 0x45fdaf Bif_F12_SORT::sort(Value_P, Sort_order)
> > 0x47746a Cell::greater_vec(Cell const*, Cell const*, void
> const*)
> > 0x476b78
> > 0x4552df do_Assert(char const*, char const*, char const*,
> int)
> > ========================================
> >
> > SI stack:
> >
> > Depth: 79
> > Exec: 0x1796ad0
> > Safe exec: 0
> > Pmode: ◊ (⍋abc⍳'maine')←⍳5
> > PC: 9 ENDL
> > Stat: (⍋abc⍳'maine')←⍳5
> > err_code: 0x0
> > thrown: at StateIndicator.cc:39
> > e_msg_1: 'No Error'
> > e_msg_2: ''
> > e_msg_3: ''
> >
> > Depth: 78
> > Exec: 0x17b2af0
> > Safe exec: 0
> > Pmode: ◊ abc[s]
> > PC: 4 ENDL
> > Stat: abc[s]
> > err_code: 0x50005
> > thrown: at Value.cc:1050
> > e_msg_1: 'INDEX ERROR+'
> > e_msg_2: ' abc[s]'
> > e_msg_3: ' ^ ^'
> >
> > Depth: 77
> > Exec: 0x17b2820
> > Safe exec: 0
> > Pmode: ◊ s⌷abc
> > PC: 3 ENDL
> > Stat: s⌷abc
> > err_code: 0x50002
> > thrown: at PrimitiveFunction.cc:2308
> > e_msg_1: 'RANK ERROR'
> > e_msg_2: ' s⌷abc'
> > e_msg_3: ' ^ ^'
> >
> > Depth: 76
> > Exec: 0x17b2e30
> > Safe exec: 0
> > Pmode: ◊ abs⍳s
> > PC: 2 'abs
> > Stat: abs⍳s
> > err_code: 0x30001
> > thrown: at Symbol.cc:662
> > e_msg_1: 'VALUE ERROR'
> > e_msg_2: ' abs⍳s'
> > e_msg_3: ' ^'
> >
> > Depth: 75
> > Exec: 0x17d0ae0
> > Safe exec: 0
> > Pmode: ◊ abs[s]
> > PC: 3 'abs
> > Stat: abs[s]
> > err_code: 0x30001
> > thrown: at Symbol.cc:662
> > e_msg_1: 'VALUE ERROR'
> > e_msg_2: ' abs[s]'
> > e_msg_3: ' ^'
> >
> > Depth: 74
> > Exec: 0x17a1e40
> > Safe exec: 0
> > Pmode: ∇ λ1[1]
> > PC: 13 ←
> >
> > ============================================================
> ==================
> > Assertion failed: idx < items_valid
> > in Function: operator[]
> > in file: Simple_string.hh:140
> >
> > Call stack:
> > *** do_Assert() called recursively ***
> > ============================================================
> ==================
> >
> >
> >
>
>