Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!ecngs!feeder.ecngs.de!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 14:04:06 -0600 From: Chris Hinsley Newsgroups: comp.lang.forth Date: Thu, 8 Nov 2012 20:04:06 +0000 Message-ID: <2012110820040689990-chrishinsley@gmailcom> References: <2012110713421835115-chrishinsley@gmailcom> <509bb9a2$0$6999$882e7ee2@usenet-news.net> <2012110814115169871-chrishinsley@gmailcom> <2012110814312086525-chrishinsley@gmailcom> <2012110814515560672-chrishinsley@gmailcom> <509bf899$0$19587$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: 54 X-Usenet-Provider: http://www.giganews.com X-Trace: sv3-V3Yp2fgYxl6F4sU1ITCfTCZUe5Jjdcs9huwXldcDcQlsybSnukL75zo3u4p+nqOagf8vZHBXO+wHtwF!kLOAJ7lk0JsSJQjxXw3t4WfpNdeqJbBdQaBeT3BpQ/wVA3ldLbnIqKBvY5I6MCpZKF2GRR0= 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: 2849 Xref: csiph.com comp.lang.forth:17180 On 2012-11-08 18:23:21 +0000, Josh Grams said: > Chris Hinsley wrote: <2012110814515560672-chrishinsley@gmailcom> >> On 2012-11-08 14:31:20 +0000, Chris Hinsley said: >>>> Josh Grams wrote: >>>>> >>>>> : LISTHEAD-ENUMERATE-FORWARDS ( u xt lh -- ln | 0 ) >>>>> TUCK SWAP 2>R >>>>> LISTHEAD-GET-HEAD BEGIN >>>>> 2DUP LISTNODE-GET-SUCC >>>>> DUP WHILE >>>>> 2R@ EXECUTE >>>>> ?DUP UNTIL ELSE NIP THEN >>>>> NIP NIP 2R> 2DROP ; >>> >>> Err, I'm not sure that works! You are skipping the first node. > > Yeah, sorry; I thought that's what your code was doing; see my response > to your first reply to mine. > >>> Isn't the 2DUP also blowing up the stack with an extra copy of the >>> original LH each time ? >> >> And it's not passing the user value into the callback at all ? > > In this case, EXECUTE is ( u ln lh xt -- ln | 0 ), right? So the 2DUP > provides two of those four items, and the 2R@ provides the other two. > > : LISTHEAD-ENUMERATE-FORWARDS ( u xt lh -- ln | 0 ) > TUCK SWAP 2>R LISTHEAD-GET-HEAD > BEGIN DUP WHILE ( u ln ) ( R: lh xt ) > 2DUP LISTNODE-GET-SUCC 2SWAP > 2R@ EXECUTE > ?DUP UNTIL THEN ( u ln ln|0 ) NIP NIP 2R> 2DROP ; > > --Josh Does the inner loop there beat the inner loop here ? I like that you've got rid of the PICK. \ ( u xt lh -- r | 0 ) \ xt api is ( u ln lh -- r | 0 ) : LISTHEAD-ENUMERATE-FORWARDS SWAP OVER 2>R LISTHEAD-GET-HEAD BEGIN DUP LISTNODE-GET-SUCC DUP WHILE 2 PICK ROT 2R@ EXECUTE ?DUP UNTIL THEN 2RDROP NIP NIP ; Chris