[plt-scheme] Procedure equality
Abdulaziz Ghuloum <aghuloum at gmail.com> writes:
> It can go both ways.
>
> For example, the expression
>
> (let ([foo (lambda () 42)])
> (eq? foo foo))
>
> might be transformed after copy propagation to
>
> (eq? (lambda () 42) (lambda () 42))
>
> and this expression may evaluate to #f.
>
> The same nonguarantee applies to numbers (afaik). For example
>
> (let ([x 1.0]) (eq? x x))
>
> may return #f.
Isn't the trick here to order the optimization passes so
that the (eq? x x) => #t rewrite always occurs before the
copy propagation pass? ;)
--
Alex