23 lines
571 B
Forth
23 lines
571 B
Forth
STRUCT
|
|
CELL% FIELD NODE>LINK
|
|
CELL% FIELD NODE>DATA
|
|
ENDSTRUCT NODE%
|
|
|
|
: COMPARE-NODES ( node1 node2 -- -1 | 0 | 1 )
|
|
>R NODE>DATA @ R> NODE>DATA @ - SIGNUM ;
|
|
|
|
: MAKE-LIST ( xu ... x1 u -- head )
|
|
0 >R RSP@ SWAP BEGIN ?DUP WHILE
|
|
1- -ROT NODE% %ALLOCATE DUP ROT ! DUP NODE>LINK -ROT NODE>DATA ! SWAP
|
|
REPEAT DROP R> ;
|
|
|
|
: SHOW-LIST ( head -- )
|
|
BEGIN ?DUP WHILE
|
|
DUP NODE>LINK @ SWAP NODE>DATA @ . SPACE
|
|
REPEAT EOL ;
|
|
|
|
7 5 3 6 8 9 4 2 4 9 MAKE-LIST
|
|
"Before: " TYPE DUP SHOW-LIST
|
|
' NODE>LINK ' COMPARE-NODES MERGE-SORT-DESCENDING
|
|
"After: " TYPE SHOW-LIST
|