retroforth/interface/dedup.retro
crc b3ba2ba20f add s:dedup, use it for user loaded extensions; begin using it in system extensions
FossilOrigin-Name: 0dbd909ec255a66290c0b0813addeebe61626aac2b43f62d9c00c6fa5a3aae61
2023-01-24 01:04:10 +00:00

28 lines
595 B
Forth

# s:dedup
String deduplication for RetroForth.
(c) Arland Childers
~~~
'init s:keep fll:create 's:dedup.data var-n
{{
't1 var
't2 var
---reveal---
:s:dedup.register (s-)
s:keep @s:dedup.data swap &fll:append/value sip ;
:s:dedup.defined? (s-f)
!t1 #0 !t2
@s:dedup.data [ @t1 s:eq? @t2 or !t2 ] fll:for-each @t2 ;
:s:dedup.find (s-s)
!t1 #0 !t2
@s:dedup.data [ dup @t1 s:eq? [ !t2 ] [ drop ] choose ]
fll:for-each @t2 ;
:s:dedup (s-s)
dup s:dedup.defined? [ s:dedup.find ] [ s:dedup.register ]
choose ;
:s:unique? (s-f) s:dedup.defined? ;
}}
~~~