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

Re: Optional base argument for LOG (and friends)

 | From: Jorgen Schaefer <forcer@xxxxxxxxx>
 | Date: Sat, 13 May 2006 12:38:46 +0200
 | It would be nice if the LOG procedure of R5RS would allow an
 | optional second argument, BASE, for the basis to which the
 | logarithm is calculated. This is the behavior from Common Lisp, and
 | the implementation is trivial - but I don't see a reason why the
 | base procedure shouldn't accept a BASE argument.
 | The implementation for R5RS is trivial, of course:
 | (define log
 |   (let ((ln log))
 |     (lambda (x . basel)
 |       (if (null? basel)
 |           (ln x)
 |           (/ (ln x)
 |              (ln (car basel)))))))
 | Taylor Campbell noted that it would be cleaner to have the base as
 | the first argument, and provide a more "intuitively" named LN
 | procedure for the natural logarithm, i.e. (LOG B Z) and (LN Z).

(LOG B X) is more consistent with mathematical usage, but breaks
Scheme precedent.  To break the tie I would look to Common-Lisp and
have the second argument be the base.

Also, (log x base) == (/ (log x) (log base)) has the same orientation
of division as (atan x1 x2) == (atan (/ x1 x2)).