home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.forth      Forth programmers eat a lot of Bratwurst      117,927 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 116,875 of 117,927   
   Ruvim to dxf   
   Naming conventions (was: Number parsing    
   13 Oct 24 08:10:32   
   
   From: ruvim.pinka@gmail.com   
      
   On 2024-10-13 06:59, dxf wrote:   
   > On 13/10/2024 1:20 pm, Ruvim wrote:   
   >> On 2024-10-13 05:13, dxf wrote:   
   >>> On 13/10/2024 12:54 am, Ruvim wrote:   
   >>>> On 2024-10-12 05:45, dxf wrote:   
   >>>>> The basics:   
   >>>>>   
   >>>>> : .BAD ( -- )  cr ." Invalid item"  .abort ;   
   >>>>>   
   >>>>> : ZE? ( x -- )  if .bad then ;     \ abort if non-zero   
   >>>>> : NZ? ( x -- )  0= ze? ;           \ abort if zero   
   >>>>   
   >>>> Typically, if word name ends with a question mark, the first (top) output   
   parameter of the word is a *flag*. And it's true for all standard words.   
   (though, opposite is not true)   
   >>>   
   >>> It's rather similar.   
   >>>   
   >>> ZE? NZ?  destructively tests TOS   
   >>   
   >> But these words do not return a flag in the first output parameter. So,   
   their names violate the common convention.   
   >   
   > Conventions are a guide.  Thankfully they're not yet a law.   
   >   
      
   Sure. But the mentioned conventions seem good.   
      
   If you are proposing generally useful words, and their names violate a   
   common convention, you could probably explain why it is not worth   
   following that convention in this case (or in general).   
      
   Or perhaps you could add a note that these names violate a certain   
   convention simply because better names have not been found yet.   
      
      
      
      
   In general, there are two groups of words that do something or do   
   nothing depending on some conditions:   
      - group1: the words that only test some parameters (on the stack   
   and/or in memory);   
      - group2: the words that consume some parameters from the stack.   
      
   The first group is larger than the second.   
      
      
   In your case, you want to have a word from the first group and the   
   corresponding word from the second group. So, a new naming rule is   
   needed to distinguish these words.   
      
   The actual difference between these groups for your words is one "DUP"   
   or "DROP". E.g.:   
      
      : ?NZ(group1)  DUP ?NZ(group2) ;   
      
      : ?NZ(group2)  ?NZ(group1) DROP ;   
      
   If I had to choose only one word from these two, I would prefer the word   
   from the first group.   
      
   So, if the corresponding word from the second group is rarely needed, it   
   might not be worth introducing. Simply use "?NZ DROP" instead of an   
   individual word. Profit: no need to find a new naming rule.   
      
   Possible words/names for internal use:   
      
      (?NZ)  ( x\0 --        |  0 -- never )   
      (?ZE)  ( x\0 -- never  |  0 --       )   
      
      
      
   --   
   Ruvim   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca