All pastes #233123 Raw Edit

Quartus

public text v1 · immutable
·published 2006-11-01 19:32 UTC
rendered paste body
: new-list ( -- list )  1 cells allocate throw  nil over ! ;

: cons ( y x -- addr )  2 cells allocate throw  dup >r  2!  r> ;
: free-cons ( addr -- )  ?dup if free throw then ;

: >car ( pair -- first-addr ) ; immediate
: >cdr ( pair -- second-addr )  cell+ ;

: car ( pair -- first )   dup if >car @ then ;
: cdr ( pair -- second )  dup if >cdr @ then ;

: delete-node ( node -- next-node )  dup cdr swap free-cons ;
: list-delete-first ( list -- )  dup @ delete-node swap ! ;

: list-push ( atom list -- )  tuck @  swap cons  swap ! ;
: list-pop ( list -- atom )  dup @ car swap list-delete-first ;

: delete-rest ( node -- nil )  begin dup while delete-node repeat ;
: list-delete ( list -- )  dup @ delete-rest swap ! ;

: join-nodes ( node2 node1 -- )  ?dup if  >cdr !  else drop then ;
: last-node ( node -- last-node )  begin dup cdr while cdr repeat ;
: lists-join ( list2 list1 -- )  swap @  swap @ last-node join-nodes ;