[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: Adding Identities to Peval

**From**: |
Andy Wingo |

**Subject**: |
Re: Adding Identities to Peval |

**Date**: |
Thu, 16 Feb 2012 10:36:51 +0100 |

**User-agent**: |
Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) |

On Thu 16 Feb 2012 02:29, Noah Lavine <address@hidden> writes:
>* (let* ((x (random))*
>* (y x))*
>* (eq? x y))*
>
>* The patch attached to this message lets peval optimize that to*
>
>* (begin (random) #t)*
Neat :)
Note, we don't need to add extra identities to operands: they already
have their gensyms. So to get the effect of this patch, you could add a
clause to fold-constants:
((primcall src 'eq? (lexical _ _ x) (lexical _ _ y))
(if (eq? x y)
(make-const src #t)
<keep-original-expression>))
This works because peval already turns it into the following, after
processing the operands for value:
(let ((x (random)))
(eq? x x))
And all we have to do is check if the lexical is being compared against
itself.
Then, I was about to say:
Now, while this is a valid reduction:
(lambda (x) (eq? x x)) => (lambda (x) #t)
This is not:
(lambda (x) (eqv? x x)) =/> (lambda (x) #t)
The reason is +nan.0: (eqv? +nan.0 +nan.0) => #f
But.... that's wrong! (eqv? +nan.0 +nan.0) isn't specified by the R6RS,
and currently we have it be #t. I guess that's good for our peval
purposes!
Cheers,
Andy
--
http://wingolog.org/

**Adding Identities to Peval**, *Noah Lavine*, `2012/02/15`
**Re: Adding Identities to Peval**, *Mark H Weaver*, `2012/02/15`
**Re: Adding Identities to Peval**, *David Kastrup*, `2012/02/16`
**Re: Adding Identities to Peval**,
*Andy Wingo* **<=**
**Re: Adding Identities to Peval**, *Noah Lavine*, `2012/02/16`
**Re: Adding Identities to Peval**, *Andy Wingo*, `2012/02/16`
**Re: Adding Identities to Peval**, *Andy Wingo*, `2012/02/16`
**Re: Adding Identities to Peval**, *Noah Lavine*, `2012/02/16`
**Re: Adding Identities to Peval**, *Andy Wingo*, `2012/02/17`
**Re: Adding Identities to Peval**, *Noah Lavine*, `2012/02/18`
**Re: Adding Identities to Peval**, *Andy Wingo*, `2012/02/19`
**Re: Adding Identities to Peval**, *Noah Lavine*, `2012/02/20`