Liste des Groupes | Revenir à cl forth |
On 26/06/2024 14:36, Ruvim wrote:Agree. This code is formally incorrect.One possible use case:ALSO duplicates the wordlist at the head of the search order. If the search order is empty there is nothing to duplicate. Therefore ALSO applied to an empty search order ought to be an ambiguous condition.
>
: turnkey ( -- ) 0 set-order
also Target definitions
also Minimal also
;
Presumably the above definition works because a target wordlist replaces whatever garbage ALSO leaves in the search order. So the definition might as well have 0 1 SET-ORDER instead of 0 SET-ORDER ALSO.As I later discovered, this "turnkey" is from Gforth, and it was corrected:
Or better still TARGET-WORDLIST 1 SET-ORDER. Either removes the above justification for 0 SET-ORDER.
But having said that it is better for 0 SET-ORDER to do what is natural instead of yet another ambiguous condition.There is a mistake (due to additions in my old example)
> Another possible use case:
>
> : s-to-n ( addr u -- n )
> depth >r
> get-order n>r 0 set-order
> ['] evaluate ['] execute-interpreting catch
> nr> set-order
> depth 1- r> <> if -12 throw then
> ;
This is a better use case e.g. if BASE is greater than decimal 10 converting an alphanumeric string to a number could clash with a word in the dictionary. Having an empty search order eliminates that possibility.My position is that no recognizer can have side effects (other then items on the data stack and/or floating-point stack).
Incidentally another possibility is that if ['] EVALUATE is replaced in the above definition with ['] SOME-RECOGNISER, that could be the basis for an ANS/FORTH 2012 compatible way of implementing recognisers. If the recogniser fails restore the search order and try again.
Les messages affichés proviennent d'usenet.