home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.lang.functional
- Path: sparky!uunet!munnari.oz.au!cs.mu.OZ.AU!mundil.cs.mu.OZ.AU!fjh
- From: fjh@mundil.cs.mu.OZ.AU (Fergus James HENDERSON)
- Subject: Re: transcendental functions in Gofer
- Message-ID: <9223923.29234@mulga.cs.mu.OZ.AU>
- Sender: news@cs.mu.OZ.AU
- Organization: Computer Science, University of Melbourne, Australia
- References: <aet.714816424@munagin>
- Date: Wed, 26 Aug 1992 13:33:53 GMT
- Lines: 44
-
- aet@mullian.ee.mu.OZ.AU (bert thompson) writes:
-
- >has anyone implemented any functions in Gofer to do any of the following
- >on Floats:
- >
- >sqrt exp log sin atan erf
- >
- >btw, i don't mind if you've use `primitive' to define them in the interpreter
- >itself.
- Wed Aug 26 23:24:55 EST 1992
-
- I haven't done these ones myself, but it is VERY easy to add new primitives.
-
- Just add lines like
- primitive "primitiveExpFloat" exp :: Float -> Float
- to the prelude, add functions like
-
- /* one-argument example */
- primFun(primExpFloat) { /* Float exp primitive */
- eval(primArg(1));
- updateRoot(mkFloat(sin(whnfFloat)));
- ^^^ substitute as appropriate
- }
-
- /* two-argument example */
- primFun(primAtan2Float) { /* Float atan2 primitive */
- Float x;
- eval(primArg(2));
- x = whnfFloat;
- eval(primArg(1));
- updateRoot(mkFloat(atan2(x,whnfFloat)());
- ^^^^^ substitute as appropriate
- }
-
- to "builtin.c", add these functions to the table of builtin functions
- in builtin.c, and then just run "make".
-
- P.S. If you have any trouble, I'd be happy to give you a hand.
-
- --
- Fergus Henderson fjh@munta.cs.mu.OZ.AU
- This .signature virus is a self-referential statement that is true - but
- you will only be able to consistently believe it if you copy it to your own
- .signature file!
-