{{TEL ... }}
\ Tel het aantal tekens en woorden in een tekst met }} als afsluiter
decimal
: {{TEL ( invoerstroom -- #tekens #woorden )
0 dup
begin bl-word count s" }}" 2over s<>
while nip 1 d+
repeat 2drop ;
\ Voorbeeld
{{TEL
Het Egel-project bestaat uit ongeveer 50 eenvoudige voorbeelden
van hardwarebesturing met noForth op de MSP430. In elk
voorbeeld vindt u een bestand met Forth-code, documentatie
en links naar meer informatie op internet. }} ( 189 32 )
{{SOM ... }}
\ Som van de getallen in een tekst met }} als afsluiter
decimal
: >N ( adr len -- n ok? ) \ len <> 0
dup 0= ?abort 2dup upper
bounds 0 >r
begin 2dup = if 2drop r> true exit then \ klaar, ok
count dup ch : ch A within or \ geen cijfer?
ch 0 - 9 over u< 7 and -
dup base @ u< \ cijfer?
while r> base @ * + >r
repeat drop 2drop r> false ; \ geen getal
: {{SOM ( invoerstroom -- som van de getallen in de tekst)
0
begin bl-word count s" }}" 2over s<>
while >n and +
repeat 2drop ;
\ Met >NUMBER in plaats van >N
: {{SOM ( invoerstroom -- som van de getallen)
0
begin bl-word count s" }}" 2over s<>
while 0 dup 2swap >number nip or 0= and +
repeat 2drop ;
\ Voorbeeld
{{SOM
Etappes op de route Arnhem-Barcelona
--- Nederland: Arnhem 0 km, Maastricht 156 km
--- Belgie: Luik 37 km, Arlon 127 km
--- Luxemburg: Luxemburg 47 km
--- Frankrijk: Metz 53 km, Nancy 51 km
Dijon 214 km, Lyon 189 km, Nimes 251 km
Monpellier 46 km, Perpignan 150 km
--- Spanje: Gerona 92 km, Barcelona 97 km }} ( 1510 )
C,, ...
\ Doe een C, zolang het getallen zijn (geen afsluiter nodig)
\ Met >N
: C,, ( invoerstroom -- )
begin bl-word
dup count >n
while c, drop
repeat drop find 0= ?abort
execute ;
\ Met >NUMBER
: C,, ( invoerstroom -- )
begin bl-word
dup count 0 dup 2swap >number nip or 0=
while c, drop
repeat drop find 0= ?abort
execute ;
\ Voorbeeld
C,, 1 2 3 5 8 13
21 34 55 89 144 233 align \ klaar
(* Het effect van dit voorbeeld is:
1 c, 2 c, 3 c, 5 c, 8 c, 13 c, 21 c, 34 c,
55 c, 89 c, 144 c, 233 c, align
*)