Oops, I realise that I forgot to include the definition of disploop. Here
it is:

∇N disploop S
→(N=0)/0
next:
S←next S
disp ← '.#'[1+S]
⎕DL ÷4
N←N-1
→next
∇


Regards,
Elias


On 20 February 2014 01:01, Elias Mårtenson <loke...@gmail.com> wrote:

> As I mentioned previously, I've been playing around with Game of Life, and
> I wrote my own. When I try to put this code in a loop, I get array
> corruption, and subsequently a crash (as I mentioned earlier) when I try to
> )SAVE the workspace.
>
> Here is the code. I start by creating a 5×5 field and initialise it with a
> blinker:
>
> D←5 5 ⍴ 0
> D[2 3 4;3]←1
>
>
> I then define the function next which calculates the next generation,
> based on the one passed in as argument:
>
> ∇Z←next D;N
> N ← (↑+/, ¯1 0 1∘.⊖ ¯1 0 1⌽¨⊂D) - D
> Z ← (3≠2 3⍳N×D) ∨ 3=N×~D
> ∇
>
>
> Then create a function that repeatedly calls next on an array and formats
> the resulting field to an array called disp. This variable is the one
> that is displayed in the Emacs buffer (for this example, there is no need
> to use that).
>
> I then try to run 10 generations on D which results in a very unexpected
> error:
>
>       *10 disploop D*
> INDEX ERROR
> disploop[4]  disp←'.#'[1+S]
>
>
> After this, I can also display the content of S which is clearly wrong:
>
>       *8⎕CR S*
> ┌→────────────┐
> │2 ┌→────────┐│
> │  ↓0 0 0 0 0││
> │  │0 0 1 0 0││
> │  │0 0 1 0 0││
> │  │0 0 1 0 0││
> │  │0 0 0 0 0││
> │  └─────────┘│
> └∊────────────┘
>
>
> By the way, shouldn't S be local to the function disploop? Why is it
> visible at all here?
>
> If I run this manually, outside of disploop, this does not happen.
>
> Finally, I try to )SAVE this workspace, and I get the same error as
> before:
>
> Assertion failed: sub_idx < values.size()
> in Function:      save
> in file:          Archive.cc:743
>
> Call stack:
>
> ----------------------------------------
> -- Stack trace at Archive.cc:743
> ----------------------------------------
> 0x7fe1efa06de5 __libc_start_main
> 0x434275  main
> 0x51cced   Workspace::immediate_execution(bool)
> 0x46173d    Command::process_line()
> 0x46139f     Command::process_line(UCS_string&)
> 0x51ffda      Workspace::save_WS(std::ostream&, std::vector<UCS_string,
> std::allocator<UCS_string> >&)
> 0x4404a4       XML_Saving_Archive::save()
> 0x4428ef        do_Assert(char const*, char const*, char const*, int)
> ========================================
>
> SI stack:
>
> Depth:    1
> Exec:     0x7fe1cc000ea8
> Pmode:    ∇ disploop[4]
> PC:       20 ←
> Stat:     disp ← '.#'[1+S]
> err_code: 0x50005
> thrown:   at Value.cc:1033
> e_msg_1:  'INDEX ERROR'
> e_msg_2:  'disploop[4]  disp←'.#'[1+S]'
> e_msg_3:  '                  ^   ^'
>
> Depth:    0
> Exec:     0x20578f0
> Pmode:    ◊  10 disploop D
> PC:       3 ENDL
> Stat:     10 disploop D
> err_code: 0x0
> thrown:   at StateIndicator.cc:39
> e_msg_1:  'No Error'
> e_msg_2:  ''
> e_msg_3:  ''
>
>
>
> ==============================================================================
> *** immediate_execution() caught other exception ***
>
>
> Regards,
> Elias
>

Reply via email to