NNTP-Posting-Date: Thu, 08 Nov 2012 13:42:47 -0600 From: Chris Hinsley Newsgroups: comp.lang.forth Date: Thu, 8 Nov 2012 19:42:47 +0000 Message-ID: <2012110819424774822-chrishinsley@gmailcom> References: <2012110713421835115-chrishinsley@gmailcom> <509bb9a2$0$6999$882e7ee2@usenet-news.net> <201211081406178276-chrishinsley@gmailcom> <509bf42e$0$11653$882e7ee2@usenet-news.net> <201211081938193500-chrishinsley@gmailcom> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: Genral advise and comments on callback style words User-Agent: Unison/2.1.9 Lines: 76 X-Usenet-Provider: http://www.giganews.com X-Trace: sv3-f6lgQDyeo0J/Ps0BzIYtoMrtiUJkz/6XcHJDe0VftrCQa0+Qr35GAd/ZO56zyiNTobW8r+Nwcqw1zRI!Hk7o8CgkPyEtYIe8WdorRvfSNW4OmxSjXe/qIN/3tk/DAdUfJ0t02dPo08LWMZCpSl+Q2t8= X-Complaints-To: abuse@giganews.com X-DMCA-Notifications: http://www.giganews.com/info/dmca.html X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 X-Original-Bytes: 3551 Path: csiph.com!usenet.pasdenom.info!news.stben.net!border3.nntp.ams.giganews.com!Xl.tags.giganews.com!border1.nntp.ams.giganews.com!nntp.giganews.com!local2.nntp.ams.giganews.com!news.giganews.com.POSTED!not-for-mail Xref: csiph.com comp.lang.forth:17178 On 2012-11-08 19:38:19 +0000, Chris Hinsley said: > On 2012-11-08 18:04:30 +0000, Josh Grams said: > >> Chris Hinsley wrote: <201211081406178276-chrishinsley@gmailcom> >>> On 2012-11-08 13:54:42 +0000, Josh Grams said: >>>> Chris Hinsley wrote: <2012110713421835115-chrishinsley@gmailcom> >>>>> Folks I have implamented an Amiga style double linked list words set a >>>>> few days back and I have an emueration word as follows: >>>>> >>>>> \ ( u xt lh -- ln | 0) >>>>> \ xt api is ( u ln lh -- ln | 0 ) >>>>> : LISTHEAD-ENUMERATE-FORWARDS >>>>> 0 >R >>>>> DUP LISTHEAD-GET-HEAD DUP >>>>> BEGIN >>>>> NIP DUP LISTNODE-GET-SUCC >>>>> DUP >>>>> WHILE >>>>> 4 PICK 2 PICK 4 PICK >>>>> 6 PICK EXECUTE DUP R! >>>>> UNTIL THEN >>>>> 2DROP 2DROP DROP >>>>> R> >>>>> ; >>>> >>>> And just out of curiosity, why are you calling GET-HEAD and then >>>> GET-SUCC before you do anything? Doesn't that skip the first list node? >>> >>> I'm keeping a 'look ahead' pointer to the next node in the list, as the >>> callback is allowed to trash the current node ! For instance it could >>> remove the node and then your left dangling ! >> >> Ah, I see. I thought you were keeping the previous one and getting the >> successor of that after the XT returned. Guess I didn't untangle the >> PICKs carefully enough. >> >> Hrm...I still think it's wrong...unless LISTNODE-GET-SUCC does something >> really strange like ( node node -- node.next node ), then your WHILE is >> checking the successor to see if it's null, so you won't process the >> final element in the list...? Or am I missing something again? >> >> --Josh > > In this forward enum case both HEAD and SUCC end up being just a ! > because HEAD and SUCC are 0. But in the backwards enumeration TAIL and > PRED are 8 and 4 respectivly. > > Chris Here are the structure defs: 0 BEGIN-STRUCTURE LISTNODE-STRUCTURE FIELD _SUCC FIELD _PRED END-STRUCTURE 0 BEGIN-STRUCTURE LISTHEAD-STRUCTURE FIELD _HEAD FIELD _END FIELD _TAIL END-STRUCTURE And this is the init words for a list to show how an empty list is set up. \ ( lh -- ) : LISTHEAD-INIT DUP >FIELD _END OVER LISTHEAD-SET-HEAD 0 OVER LISTHEAD-SET-END DUP >FIELD _HEAD SWAP LISTHEAD-SET-TAIL ; Regards Chris