# s:dedup String deduplication for RetroForth. (c) Arland Childers ~~~ 'init s:keep fll:create 's:dedup.data var-n {{ 'Temp d:create #1024 allot '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) &Temp s:copy &Temp dup s:dedup.defined? &s:dedup.find &s:dedup.register choose ; :s:unique? (s-f) s:dedup.defined? ; }} ~~~ ~~~ 'interface/dedup.retro s:dedup dup 's:unique? d:lookup d:source store dup 's:dedup d:lookup d:source store dup 's:dedup.find d:lookup d:source store dup 's:dedup.defined? d:lookup d:source store dup 's:dedup.register d:lookup d:source store dup 's:dedup.data d:lookup d:source store drop ~~~