Each bullet below shows a call to `interp' as if tracing the function. When the argument is a number, identifier, or function expression, we also show the immediate result. * {with {f {with {y 10} where [empty] {fun {x} {+ x y}}}} {with {y 8} {f y}}} * {with {y 10} where [empty] {fun {x} {+ x y}}} * 10 where [empty] * {fun {x} {+ x y}} where y = 10 => <<< {fun {x} {+ x y}} where y = 10 >>>, which is a closure * {with {y 8} {f y}} where f = <<< {fun {x} {+ x y}} with y = 10 >>> * 8 where f = <<< {fun {x} {+ x y}} with y = 10 >>> => 8 * {f y} where y = 8 and f = <<< {fun {x} {+ x y}} with y = 10 >>> *f where y = 8 and f = <<< {fun {x} {+ x y}} with y = 10 >>> => <<< {fun {x} {+ x y}} with y = 10 >>> * y where y = 8 and f = <<< {fun {x} {+ x y}} with y = 10 >>> => 8 * {+ x y} with x = 8 and y = 10 * x with x = 8 and y = 10 => 8 * y with x = 8 and y = 10 => 10 ... so the result is 18.