CREATE linked.txt \ Leo Wong 2 April 02003 fyj + \ >comp >data comp inlist? link linked linked.txt node sadd \ ssadd xlist xnode \ See: ceb.txt defs.txt qpt.txt from tools.txt : node HERE 0 , , ; : linked CREATE node ; : link ( list -- ) CELL+ ALIGN HERE SWAP 2DUP @ ! ! 0 , ; : >data ( node -- data ) CELL+ ; : ssadd ( ca u list -- ) ROT ROT ALIGN HERE >R 0 , 2DUP 2>R string, BEGIN DUP @ DUP WHILE DUP >data COUNT 2R@ COMPARE 0< WHILE NIP REPEAT THEN 2R> 2DROP R@ ! R> SWAP ! ; : sadd ( n list -- ) SWAP ALIGN HERE >R 0 , DUP >R , BEGIN DUP @ DUP WHILE DUP >data @ R@ < WHILE NIP REPEAT THEN R> DROP R@ ! R> SWAP ! ; floating? [IF] [IF] : f, ( f: r -- ) FALIGN HERE 1 FLOATS ALLOT F! ; : fsadd ( list -- ) ( f: r -- ) ALIGN HERE >R 0 , FDUP f, BEGIN DUP @ DUP WHILE DUP >data FALIGNED F@ FOVER F< WHILE NIP REPEAT THEN FDROP R@ ! R> SWAP ! ; [THEN] [THEN] DEFER xnode ( node -- ) ' ? IS xNode \ : xlist ( list -- ) @ ?DUP 0= ?? EXIT DUP xnode RECURSE ; : xlist ( list -- ) BEGIN @ DUP WHILE DUP xnode REPEAT DROP ; DEFER >comp ' >data IS >comp DEFER comp ' COMPARE IS comp : inlist? ( ca u list -- ca u a|0 ) @ DUP 0= ?? EXIT DUP >R >comp COUNT 2OVER comp 0= R> SWAP ?? EXIT RECURSE ;