That's easy to avoid the problem with erasing names in the path.

Option 1: assign the name using =. before erasing it.

Option 2: use a form of the name which specifies the locale.

Put differently, how is it useful for erase to tell you you have made
a mistake when what you really want is to not make the mistake in the
first place?

Thanks,

-- 
Raul

On Wed, Sep 17, 2014 at 2:13 PM, Don Guinn <[email protected]> wrote:
> It has always bothered me that erase will erase names in the path if the
> name does not exist in the current locale. It kind of makes sense to do
> that, but erasing names from other locales, particularly the z locale does
> not seem right either. I created my own erase to only erase from the
> current locale but it is not pretty and seems inefficient if used a lot.
> Perhaps adding a dyadic option to 4!:55, values 0 and 1. Zero being the
> current way to erase from the path and the default, and 1 restricting erase
> to the current locale.
>
> The problem with avoiding local names is easily avoidable by creating
> another erase verb which is explicit instead of tacit. But if erase is made
> dyadic then maybe 2 could mean only erase local names or 3 for only global
> names.
>
> Then there is the problem of erasing a pendent name. This results in a
> stack error. Why not make erase return 1 if successful and 0 if not as
> Linda expected instead of if the name is legal or not? That makes the
> return more useful.
>
> On Wed, Sep 17, 2014 at 11:42 AM, Raul Miller <[email protected]> wrote:
>
>> The result from erase is telling you that the name is legal to erase.
>> To get a zero, try erase 'i.'
>>
>> If you want to see whether the operation succeeded, you'll need to do more
>> work.
>>
>> One issue you need to consider is the class of the name.
>>
>>   nameClass=: [: nameclass ;: ::]
>>
>> Only names with a non-negative class can be removed by erase.
>>
>> Another issue which might interest you is whether the name is defined
>> locally. This needs work (it gives undefined names a definition), but
>> is a hint as to how you could test for whether the  name is defined
>> locally:
>>
>>    nameLocal=:  [: {.@".@('0[',],'=:',]) ::1:&> ;: ::]
>>
>> Another issue which might interest you is what locales the name is defined
>> in.
>>
>> nameLocales=:[: 3 :0 S:0 ;: ::]
>>   path=. ~.(,18!:2)18!:5''
>>   test=.'(p P y)](4!:0<''',y,'__y'')[(''''P y)[p=.(P=.18!:2)y'
>>   <path#~_1<(3 :test)"0 path
>> )
>>
>> Example use:
>>    nameClass 'this is a test'
>>    nameLocal 'this is a test'
>>    nameLocales 'this is a test'
>>
>> nameClass gives you a list of numbers in the range _2 through 3
>> indicating whether the name is illegal, undefined, noun, adverb,
>> conjunction or verb.
>>
>> nameLocal gives you a 1 for names with local definitions (and for
>> illegal names). Be careful, though, because it will define the name if
>> it's not already defined.
>>
>> nameLocale gives you a boxed list of the locales where you can find
>> the definition of the name.
>>
>> Anyways... there's lots of ways things could work. But why would you
>> erase a name in the first place, if you don't know that it exists?
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>>
>> On Wed, Sep 17, 2014 at 10:40 AM, Linda Alvord <[email protected]>
>> wrote:
>> > For a long time this has puzzled me.
>> >
>> >
>> >
>> > A=:2 4$i.8
>> >
>> >    erase 'A'
>> >
>> > 1
>> >
>> >    erase 'A'
>> >
>> > 1
>> >
>> >
>> >
>> > It seems the second time it tells me it erased A it is lying because
>> there
>> > should be no A any longer.
>> >
>> >
>> >
>> > Now it is really bothering me.
>> >
>> > load 'viewmat'
>> >
>> > ]GRB=:1 0 2{"1 (#:i.8){0 255
>> >
>> > ]T=:+/~i.16
>> >
>> > GRB viewmat T;'T'GRB viewmat i.16
>> >
>> >
>> >
>> > ]C=:i.12
>> >
>> > GRB viewmat C
>> >
>> >
>> >
>> > ]D=:3 4$i.12
>> >
>> > GRB viewmat D
>> >
>> >
>> >
>> > ]M=:5 3$i.15
>> >
>> > GRB viewmat M
>> >
>> >
>> >
>> > GRB viewmat 7 3$i.21
>> >
>> >
>> >
>> > ]B=:4 4$i.16
>> >
>> > GRB viewmat B
>> >
>> >
>> >
>> > GRB viewmat |: B
>> >
>> >
>> >
>> > GRB viewmat |.|:B
>> >
>> >
>> >
>> > If I run a  different script with images in  1.ijs   and then run
>>  2.ijs  I
>> > get images all mixed up.  Even If I remove all  png's from the temp
>> folder,
>> > ghosts of previous images appear.  I turn of  JHS.bat  and the try  2.ijs
>> > and old images show up.  They seem to be coming from the clipboard
>> possibly.
>> > Erasing names does not seem to help, but I'd like it better if I only
>> got a
>> > 1  when it finds something with the given name and then was not willing
>> to
>> > erase it abain.
>> >
>> >
>> >
>> > However, it is great to see any images!   Also,  jqt  seems to be
>> unphased
>> > by thses ghosts.
>> >
>> >
>> >
>> > Linda
>> >
>> >
>> >
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to