Without assigning it to a variable, I don't see what sense the
statement even makes.
(⊃⊃x)
produces an intermediate value. I can't think of what sense making an
assignment to an intermediate value even does.
I think APL should just throw a syntax error as in:
(+/10 10⍴⍳100)[2]←4
SYNTAX ERROR
(+/10 10⍴⍳100)[2]←4
^ ^
(Surely a syntax error is more appropriate than a segfault!)
What does IBM APL do?
--blake
On Sat, Apr 4, 2020 at 5:03 PM Rowan Cannaday <[email protected]> wrote:
> hello y'all, hope everyone is staying safe.
>
> x ← 1 (2 3 (4 5))
> (⊃⊃x)[2;3;] ← 6 7
>
>
> ===================================================
> SEGMENTATION FAULT
>
> ----------------------------------------
> -- Stack trace at main.cc:88
> ----------------------------------------
> 0x7F032D7BABBB __libc_start_main
> 0x557F8B045425 main
> 0x557F8B1BE755 Workspace::immediate_execution(bool)
> 0x557F8B099A4B Command::process_line()
> 0x557F8B09A45A Command::do_APL_expression(UCS_string&)
> 0x557F8B099AE8 Command::finish_context()
> 0x557F8B0A3698 Executable::execute_body() const
> 0x557F8B159D4C StateIndicator::run()
> 0x557F8B0DB23D Prefix::reduce_statements()
> 0x557F8B0DA17D Prefix::reduce_MISC_F_B_()
> 0x557F8B0F1F4F Bif_F12_PICK::eval_B(Value_P)
> 0x557F8B0EBB33 Bif_F12_PICK::disclose(Value_P, bool)
> 0x557F8B0EB86A Bif_F12_PICK::compute_item_shape(Value_P, bool)
> 0x7F032DCD1520
> 0x557F8B04C4AB
> ========================================
> ====================================================
>
> By the way, it works if you use an intermediary variable:
>
> y←⊃⊃x
> y[2;3;]
> 4 5
> y[2;3;] ← 5 6
> y
> 1 0
> 0 0
> 0 0
>
> 2 0
> 3 0
> 5 6
>
> Cheers,
> - Rowan
>