Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #3639
| NNTP-Posting-Date | Wed, 29 Jun 2011 13:32:03 -0500 |
|---|---|
| From | Chris Hinsley <chris.hinsley@gmail.com> |
| Newsgroups | comp.lang.forth |
| Date | Wed, 29 Jun 2011 19:32:03 +0100 |
| Message-ID | <2011062919320387546-chrishinsley@gmailcom> (permalink) |
| References | <2011062814435882049-chrishinsley@gmailcom> <DLadnaa9famEZ5TTnZ2dnUVZ8v2dnZ2d@supernews.com> <2011062818340635857-chrishinsley@gmailcom> <20110628185151666-chrishinsley@gmailcom> <2011062819022446632-chrishinsley@gmailcom> <2011062819111570841-chrishinsley@gmailcom> <iufj50$tct$1@dont-email.me> <iufm7g$kf4$1@dont-email.me> |
| MIME-Version | 1.0 |
| Content-Type | text/plain; charset=iso-8859-1; format=flowed |
| Content-Transfer-Encoding | 8bit |
| Subject | Re: macro expansion ? |
| User-Agent | Unison/2.1.4 |
| Lines | 70 |
| X-Usenet-Provider | http://www.giganews.com |
| X-Trace | sv3-wLWTjIY32IzUi3gHv3E9zHVYZkN9wndO/4/f41+KAAH9tnFA7DVt7CHP13k+KaQ0QYyXD1UcWCnut/b!GCqE37x/Db0yeurnrNbmSs72+Le/fAulNpQrXoZVeZmPXH9+HVSICu60GWPMV73iJHRdzg== |
| 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 | 3377 |
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!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 | x330-a1.tempe.blueboxinc.net comp.lang.forth:3639 |
Show key headers only | View raw
On 2011-06-29 18:09:49 +0100, Gerry Jackson said: > On 29/06/2011 17:17, Gerry Jackson wrote: >> On 28/06/2011 19:11, Chris Hinsley wrote: >>> On 2011-06-28 19:02:24 +0100, Chris Hinsley said: >>> >> >> [...] >> >>>> How about a macro that did greatest common divider ? >>>> >>>> Function gcd(a As Integer, b As Integer) As Integer >>>> If b = 0 Then >>>> gcd = a >>>> Else >>>> gcd = gcd(b,a) >>>> End If >>>> End Function >>>> >>>> Chris >>> >>> I think I'm rapidly getting into the 'but you wouldn't do it like that' >>> teritory. You'd just define a word that did the calcutation, and then >>> use it with somthing like [ 15 5 GCD ] LITERAL. >>> >>> But I'm pushing the issue of how you'd do it with a macro called GCD to >>> expose the limits. >>> >> >> Andrew & Anton have given you good reasons not to do it via a macro, but >> if you really want to have a gcd macro it's not difficult e.g an >> interpret time macro for gcd is: >> >> macro gcd ?dup [if] tuck mod gcd [then]" >> cr 17 118 * 17 62 * gcd . \ Should display 34 >> >> To use it in a colon definition you can do >> : t1 [ 17 118 * 17 62 * gcd ] literal ; >> t1 . \ Should display 34 >> >> To pass the arguments into the colon definition requires a little more >> trickery (for systems such as GForth that place control information on >> the data stack and other systems that require a balanced stack between : >> and ;) e.g.: >> >> : pass >r ' execute r> ; immediate >> 17 118 * 17 62 * pass pass : t2 [ gcd ] literal ; >> t2 . \ Should display 34 >> >> Alternatively [gcd] can be defined as a macro: >> >> macro [gcd] [ ?dup [if] tuck mod [gcd] [else] ] [then]" >> 17 177 * 17 93 * pass pass : t3 [gcd] literal ; >> t3 . \ should display 51 >> >> It all works with GForth >> > > Incidentally the gcd calculation can be done in interpret mode without > a macro e.g. > > 51 59 * 51 31 * > ?dup [if] tuck mod 0 >in ! [then] . Neat ! This sort of thing is the mind bending stuff I like about Forth. ! Chris
Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 14:43 +0100
Re: macro expansion ? Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-06-28 10:58 -0500
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 18:34 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 18:51 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 19:02 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 19:11 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 19:17 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 19:47 +0100
Re: macro expansion ? Josh Grams <josh@qualdan.com> - 2011-06-29 15:34 +0000
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-29 19:21 +0100
Re: macro expansion ? Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-06-29 03:15 -0500
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-29 13:11 +0100
Re: macro expansion ? Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2011-06-29 17:17 +0100
Re: macro expansion ? Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2011-06-29 18:09 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-29 19:32 +0100
Re: macro expansion ? Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2011-07-02 08:48 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-29 00:44 +0100
Re: macro expansion ? Gerry Jackson <gerry@jackson9000.fsnet.co.uk> - 2011-06-29 20:39 +0100
Re: macro expansion ? Elizabeth D Rather <erather@forth.com> - 2011-06-28 08:59 -1000
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 20:39 +0100
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-28 21:34 +0100
Re: macro expansion ? Andrew Haley <andrew29@littlepinkcloud.invalid> - 2011-06-29 03:26 -0500
Re: macro expansion ? anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-06-29 11:25 +0000
Re: macro expansion ? Chris Hinsley <chris.hinsley@gmail.com> - 2011-06-29 13:24 +0100
Re: macro expansion ? anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2011-07-03 14:02 +0000
Re: macro expansion ? Albert van der Horst <albert@spenarnc.xs4all.nl> - 2011-06-29 18:48 +0000
Re: macro expansion ? BruceMcF <agila61@netscape.net> - 2011-06-30 11:11 -0700
Re: macro expansion ? Ian Osgood <iano@quirkster.com> - 2011-07-02 16:22 -0700
Re: macro expansion ? Hugh Aguilar <hughaguilar96@yahoo.com> - 2011-07-05 17:35 -0700
csiph-web