Sujet : Re: Back & Forth - Co-routines
De : sjack (at) *nospam* dontemail.me (sjack)
Groupes : comp.lang.forthDate : 22. Mar 2025, 16:51:18
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vrmm9l$994t$1@dont-email.me>
References : 1 2 3 4 5
User-Agent : tin/2.6.4-20240224 ("Banff") (Linux/6.8.0-55-generic (x86_64))
Ruvim <
ruvim.pinka@gmail.com> wrote:
An artificial example:
While wondering down roads less taken, I took a path where
bacForth CUT: and -CUT were used in lieu of CATCH THROW .
( ENTER is the same as ';:' )
: LOCAL ( x adr -- )
r> -rot dup @ over 2>r ! ENTER 2r> ! ;
\ prefixed '-' to indicate this word does a cut
: -idiv ( n1 n2\0 -- n3 | n1 0 -- true )
dup if /
else 2drop true -CUT
then
;
: ?idiv ( n1 n2 -- n1/n2 false | <nothing> )
CUT: -idiv ." Valid: " false
;
42 variable a
42 variable b
: ?/ ( u1 u2 -- u1/u2 )
a local b local
b @ a @ ?idiv
if ." Bogus! " 666 then .
;
i. 100 5 ?/ --> Valid: 20
i. a ? b ? --> 42 42
i. 100 0 ?/ --> Bogus! 666
i. a ? b ? --> 42 42
forget ?/
: ?/ ( u1 u2 -- u1/u2 )
a local b local
b @ a @ ' ?idiv ENTER
if ." Bogus! " 666 then .
;
i. 100 5 ?/ --> Valid: 20
i. a ? b ? --> 42 42
i. 100 0 ?/ --> Bogus! 666
i. a ? b ? --> 42 42
forget ?/
: ?/ ( u1 u2 -- u1/u2 )
a local b local
b @ a @ (: cut: -idiv ." Valid: " false ;) ENTER
if ." Bogus! " 666 then .
;
i. 100 5 ?/ --> Valid: 20
i. a ? b ? --> 42 42
i. 100 0 ?/ --> Bogus! 666
i. a ? b ? --> 42 42
+echo
-fin-