|
From: | Jay Foad |
Subject: | Re: [Bug-apl] Assertion failed in 'equal' |
Date: | Tue, 18 Oct 2016 12:42:13 +0100 |
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
<address@hidden> 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 ***
> ============================================================ ==================
>
>
>
[Prev in Thread] | Current Thread | [Next in Thread] |