bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bugs (perhaps?) in behaviour of )COPY, )PCOPY with named lambda fns


From: Russtopia
Subject: Re: Bugs (perhaps?) in behaviour of )COPY, )PCOPY with named lambda fns
Date: Sat, 10 Jul 2021 10:30:54 -0700

Ah, that all makes sense. I hadn't considered the differing return types for )ERASE vs. ⎕EX, that is useful.

Thank you,
-Russ


On Sat, 10 Jul 2021 at 07:05, Dr. Jürgen Sauermann <mail@jürgen-sauermann.de> wrote:
Hi,

I believe this is simply a misunderstanding of functionality.

Consider this (something similar happens if you )COPY the same script
twice):

*      )CLEAR**
**      FOO←{ 42 ⊣ ⍵ }   ⍝ OK: create monadic defined function FOO
(which returns 42)**
**      FOO←{ 42 ⊣ ⍵ }   ⍝ ERROR: FOO is now a defined function, so you
cannot assign anything to it.**
**SYNTAX ERROR**
**      FOO←λ1**
**      ^   ^*

As matter of protection, in GNU APL you cannot re-define a named lambda
without erasing it.
You can (and in most cases should), however, localize it.

As to )ERASE vs. ⎕EX: use )ERASE in immediate execution mode (preferably
after )SIC)
and ⎕EX in defined functions. In immediate execution (which includes
scripts) it is a matter
of preference which one you use and in which fashion you want to get the
success of the of
the operation (error text for failed )ERASE or a boolean vector for ⎕EX).

Best Regards,
Jürgen


On 7/10/21 6:41 AM, Russtopia wrote:
> I have noticed what I believe are some inconsistencies (bugs?) with
> how GNU APL handles reloading/overwriting/erasing of symbols which are
> 'trad fns' versus 'lambda fns'.
>
> Consider the following )DUMP file:
>
> --8<--
> #!/usr/local/bin/apl --script
>  ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
> ⍝        ⍝
> ⍝ sink.apl                             2021-07-09  20:04:14 (GMT-8)  ⍝
> ⍝        ⍝
>  ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝
>
> Life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
>
> ∇a←MatToVecArray M
>  ⍝⍝ Return rows in M as an array of vectors
>  ⍝⍝ lambda (dfn) version: {(⊂⍺){⍺[⍵;]}¨⍳≢⍵} ⍝⍨M
>  a←{⊂M[⍵;]}¨⍳≢M
> ∇
> --8<--
>
> The above will )LOAD and )LOAD a second time, without error (as I
> presume it totally overwrites the current WS). However, )COPY or
> )PCOPY will give an error for the 'Life' function if it is already
> loaded into the current WS:
>
>       )copy sink Life
> DUMPED 2021-07-09  20:04:14 (GMT-8)
>       )copy sink Life
> DUMPED 2021-07-09  20:04:14 (GMT-8)
> SYNTAX ERROR
>       Life←λ1
>       ^    ^
>
> Regular 'trad fns' can be re-loaded into the current WS without issue.
>
> If I add in
>
> ⎕EX 'Life'
>
> to sink.apl above the definition, )COPY and PCOPY will now succeed;
> but if I )DUMP this WS back to file, the ⎕EX is not part of the )DUMP
> output so problems will re-occur.
>
> As an final note, as an APL newcomer: When is it preferable to use ⎕EX
> instead of )ERASE ?)
>
> Thanks,
> -Russ
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]