[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ratio implementation

From: Marius Vollmer
Subject: Re: ratio implementation
Date: Mon, 15 Sep 2003 12:35:36 +0200
User-agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux)

Bill Schottstaedt <address@hidden> writes:

> There is an implementation of ratios for Guile (based on CVS version
> of 27-Jul-03) at
> Rather than send a huge diff, I placed the new versions of the changed
> files (all from the libguile directory) in the tarball along with
> *.diff showing the changes.

Good work, thanks!  However, I don't think we should restrict us to
longs as the numerator/denominator, we should use fixnums and bignums.
Your patch is a very good basis for this and it should be quite
straightforward to make it use SCM integers as the

That is, instead of using "long", I'd say we simply use "SCM" and
instead of "+", "==", etc, we use use "scm_sum", "scm_num_eq_p", etc.
Also, instead of mallocing scm_t_ratio, we can use double cells, which
should be more efficient.

Any takers?

(Also I didn't really check whether your rationals behave like R5RS
demands it.  Did you?  We should be sure to follow R5RS.)

> I added numerator, denominator, rationalize and ratio?, and at the C
> level scm_make_ratio and scm_i_ratio2real (should it be
> scm_ratio2dbl?).  "ratio?" is needed because "rational?" returns #t
> if passed a real -- there has to be some way to distiguish a ratio
> from a real.

A ratio is exact, while a real is not.  Thus, I'd say that ratio? is
not really necessary.  There should be no reason to add anything eyond
R5RS for ratios.

> An alternative would be to make "rational?"  rational.

That would violate R5RS, wouldn't it?

> I don't know how the FSF/GPL copyright stuff works, but I did this
> work on my own time, did not look at any other implementation, and
> hereby donate the code to you.  I'd be happy to "sign the papers".

Thanks!  I'll get back to you about the papers when necessary.

> I decided to make minimal changes, but handling of exact/inexact
> distinctions in Guile could use some work (I am willing do this, if
> others approve).

That would be great!

> And currently (format #f "~F" 2/3) hangs, but so does (format #f
> "~B" 1.5) (in Guile 1.6.4 you get an error, but in the CVS Guile it
> hangs in mutex_lock).

This should be fixed in CVS.

GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405

reply via email to

[Prev in Thread] Current Thread [Next in Thread]