axiom-developer
[Top][All Lists]
Advanced

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

Re: [Axiom-developer] The lisp function ONEP


From: Mike Dewar
Subject: Re: [Axiom-developer] The lisp function ONEP
Date: Mon, 29 Sep 2003 11:07:09 +0100

Hi Jaap,

Axiom expects the definition of onep to be "=" rather than eq.

Mike.


On Fri, Sep 26, 2003 at 04:50:55PM -0700, Jaap Weel wrote:
> ONEP is a common predicate in some older Lisps, but not in Common Lisp. 
> It appears in McCarthy's Lisp 1.5 
> (http://green.iis.nsk.su/~vp/doc/lisp1.5/mccarthy.html). It's supposed 
> to test if it's argument is equal to 1. Problem is that in the Lisp 
> world, there are various interpretations of "equal" and "1". Let the 
> show begin.
> 
> McCarthy in the mentioned reference writes:
> 
>       onep[x] is true if |x-1| <= 3*10^6
> 
> So far so good.
> 
>  From simp.lisp in the Maxima sources, which probably reflects Maclisp:
> ";; The following definitions of ONEP and ONEP1 are bummed for speed, 
> and should
> ;; be moved to a special place for implementation dependent code.
> ;; ONEP is the same as (EQUAL A 1), but does the check inline rather 
> than
> ;; calling EQUAL (uses more instructions, so this isn't done by 
> default).  ONEP
> ;; seems to be used very rarely, so it seems hardly worth the effort.  
> On the
> ;; Lisp Machine, this is probably more efficient as simply (EQUAL A 1).
> 
> #+(and cl (not cmu))
> (defmacro onep (a) `(eql ,a 1))
> 
> #+cl
> (DEFMFUN ONEP1 (A) (OR (and (numberp a) (= A 1)) (EQUAL A BIGFLOATONE)))
> 
> #-cl
> (progn 'compile
> (DEFMFUN ONEP (A)
>    #-NIL (AND (EQ (ml-typep A) 'fixnum) (= A 1))
>    #+NIL (eql a 1))
> 
> #-(or Franz cl)
> (DEFMFUN ONEP1 (A) (OR (EQUAL A 1) (EQUAL A 1.0) (EQUAL A 
> BIGFLOATONE)))"
> 
> However, in the Standard Lisp Report (an early standardization effort):
> 
> "
> ONEP(U:any):boolean eval, spread.
>       Returns T if U is a number and has the value 1 or 1.0. Returns NIL
>       otherwise.
> 
>       EXPR PROCEDURE ONEP(U);
>       OR(EQN(U, 1), EQN(U, 1.0));
> 
> [The definition in the published report is incorrect as it does not 
> return T for U of 1.0.]
> "
> 
> There's clearly a lot of confusion about what ONEP should do. I think, 
> however, that you can easily check experimentally in a GCL interpreter 
> which interpretation GCL uses. I don't have a GCL here, but it 
> shouldn't be hard. Keep in mind the difference between the functions =, 
> eq, eql, and equal. For that, see sections 6.3 and 12.3 in CLtL2 
> (Common Lisp the Language 2, available online).
> 
> With SBCL:
> 
> * (= 1 1.0)
> T
> * (eq 1 1.0)
> NIL
> * (eql 1 1.0)
> NIL
> * (equal 1 1.0)
> NIL
> * (= 1 1)
> T
> * (eq 1 1)
> T
> * (eql 1 1)
> T
> * (equal 1 1)
> T
> 
> At any rate, it seems likely that either of the following is the right 
> thing:
> 
> (defun onep (x) (= x 1))
> (defun onep (x) (eq x 1))
> 
> I don't think McCarthy's definition is relevant.
> 
> ========================================================================
> Jaap Weel                   Campus address:        | dorm (626) 795-9748
> Caltech, Blacker '05        Caltech MSC #874, Pasadena, CA 91126, U.S.A.
> www.its.caltech.edu/~weel   Permanent address:     | home +31-46-4337033
> E-mail: address@hidden    Kelderstraat 2-4, 6171 GB Stein, Netherlands
> ========================================================================
> 
> 
> 
> 
> _______________________________________________
> Axiom-developer mailing list
> address@hidden
> http://mail.nongnu.org/mailman/listinfo/axiom-developer
> 
> ________________________________________________________________________
> This e-mail has been scanned for all viruses by Star Internet. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ________________________________________________________________________

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________




reply via email to

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