Sorry if I got the syntax wrong, but in something like
f = {
x = (list 1 2 3)
y = (list x x)
z = (get x 1)
<- y
}
How does the compiler decides if it must free the memory used by x?