I liked the inflected names because they stood out.  When you used them, you 
knew that they were special.  The inflections made it clear the interpreter, 
not you, had control of them.

There were certain annoyances, like the  name__y.  problem, but certain 
advantages too, like the ability to search code with  ;:  and be sure you'd 
pick up the right variables.

I secretly believe Roger decided to make this change because of the 
inconsistency of the Dictionary wrt to the phrases "names", "inflected names", 
and "a primary cannot be assigned a referent".  

I would have preferred that the inconsitency had been resolved by keeping the 
inflected forms but making them unassignable.  This is how I treated them for 
years, and I was fairly shocked to learn you could assign them, and even change 
their name class.

Another niggling worry I've had is the ability to reference these names outside 
of an explicit definition.  In the scheme I propose, that problem disappears; a 
bonus.  

Since the inflected names can only be given values by the interpreter, which 
will only occur within an explicit definition, then these names could never 
have a value outside an explicit definition. They would retain their name 
classes, but would always produce value errors in immediate execution mode (see 
postscript A).  

By the way, this "solution" resolves one inconsistency but exacerbates another. 
 While this has always been true:

           u. u. u.
        |value error: u.
        |   u. u.     u.
           
It's understandable and nearly predictable.  However, now you've got:

           e e e
        e e e
           u u u
        |value error: u
        |   u u     u
 

This is going to surprise newbies, and it contradicts to the Dictionary (see 
postscript B).

If the change is non-negotiable, I say do NOT treat these uninflected specially 
in immediate execution.  If you treated them as true "unassigned names", we 
could get back some of the power and elegance of the old J4 trains table. We'd 
be able to do cool stuff like:

           keyed_universe  =:  [: u@:}./.~ n , ]
           ku              =:  2 : 'keyed_universe f.'
           # ku 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'DANIEL BRON'
        1 1 0 1 1 0 0 0 1 0 0 1 0 2 1 0 0 1 0 0 0 0 0 0 0 0 0
   
-Dan 

PS:

(A)

Perhaps, x.y.m.n.u.v. could be spelling errors in immex, like control words.  
But that might cause users to consider them control words, which they're not.  
Control words have more than one letter before the inflection and are sentence 
boundaries.

(B)

           >(1060 46 ; 1991 69) qdoj L: 0 ;: 'dictf intro06'
        A train of two or three verbs produces
        a verb                       
        
        Entry of a verb alone (without an argument) displays its definition
           
           +/ % #     NB.  3 verbs produce a verb...
        +/ % #
                      NB.  Yep, and entering it alone produced its definition
           
           
           > (979 250 ; 5047 42) qdoj L: 0 ;: 'dx004 dicte'
        
        4!:0 y  
        
        Name Class.  Class of (boxed) name:
        
        
        _2  invalid
        _1 unused
        
        an unassigned name being treated as a verb                              
       

           4!:0 <'e'  NB.  Name class of e?
        _1
           e e e      NB.  Unassigned --> verb.  Hence this is a train of 3 
verbs
        e e e
                      NB.  And look -- it displayed its definition

           4!:0 <'u'  NB.  Name class of u
        _1
           u u u 
        |value error: u
        |   u u     u
                      NB.  What?


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to