Path: csiph.com!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!border1.nntp.ams2.giganews.com!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 NNTP-Posting-Date: Thu, 08 Nov 2012 13:38:19 -0600 From: Chris Hinsley Newsgroups: comp.lang.forth Date: Thu, 8 Nov 2012 19:38:19 +0000 Message-ID: <201211081938193500-chrishinsley@gmailcom> References: <2012110713421835115-chrishinsley@gmailcom> <509bb9a2$0$6999$882e7ee2@usenet-news.net> <201211081406178276-chrishinsley@gmailcom> <509bf42e$0$11653$882e7ee2@usenet-news.net> 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: 48 X-Usenet-Provider: http://www.giganews.com X-Trace: sv3-yOeiejGLbeOIsUcoTeSlu0pksy6dV8KIEcbpWdwgR7FXp9DowUa6Gbv9LudgnZUAYQSFsG3kcF7sTRy!o9dLVr4l0jaDPTI7rOUt8hg9NtBhn2BXJyeWQm3R++k8hK6StJmqyxDbFn4PCFGc09/mUQ== 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: 2946 Xref: csiph.com comp.lang.forth:17177 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