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