guile-devel
[Top][All Lists]
Advanced

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

Re: GNU Guile 2.9.9 Released [beta]


From: Stefan Israelsson Tampe
Subject: Re: GNU Guile 2.9.9 Released [beta]
Date: Tue, 14 Jan 2020 17:36:22 +0100

1. I don't understand why you decrement the count in operator position
2. I don't see that you increase the count when a procedure is returned from a lambda

Example
(define (f a) a)
(define (g)
    (hash-set! H f 1) ; (*)
    (f 1)) ;(**)
(define (h)
   (pk (hash-ref H f))) ; (*)

(g)
(h)

=> '(#f) as count in your patch is counted up twice (*) and down ones (**) in total count = 1 so you will not maintain the identity of f and you will get a bad printout

Then we also have this example
(define (f a) a)
(define (u) f)
(define (g) (hash-set! H (u) 1))
(define (h) (pk (hash-ref H f)))

(g)
(h)
This will again print (#f) as the count will be 1.

/Stefan














    








On Tue, Jan 14, 2020 at 5:16 PM Andy Wingo <address@hidden> wrote:
On Tue 14 Jan 2020 15:47, Stefan Israelsson Tampe <address@hidden> writes:

> Yes, your patch is indicating when you should use the same identity
> e.g. all uses of procedures in a higher order position such as an
> argument or a return value. But I looked at your patch, which looks
> good but I saw that for operator position you decrease the count. Why?
> Also you are free to use one version in argument / return position and
> another one in operator position the only limit is to use the same
> identity for on operator position. Finally don't you need to count
> usage of returning a variable as well?

Not sure what the bug is.  Do you have a test case that shows the
behavior that you think is not good?

Andy

reply via email to

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