3 ms·
>The difference is that a fexpr arguments are not evaluated before it's called What's funny is that the actual lambda calculus allows multiple reduction strate
by PhilipRoman 3y ago
>The difference is that a fexpr arguments are not evaluated before it's called
What's funny is that the actual lambda calculus allows multiple reduction strategies, including lazy evaluation. So I guess the only reason to introduce this distinction is to facilitate impure code, which cares about the difference.
- kaba0 3y agoI mean, there are observable differences between the two. An obvious one is to have an infinite recursive function application as a parameter to a function. Depending on whether CBV or CBN is used, you either get non-halting code, or a meaningful result.
- tonyg 3y agoKernel-style fexprs give macros plus a bunch of reflective abilities that even macros don't provide. Lazy evaluation (alone) doesn't do that.
- JonChesterfield 3y agoThe kernel thesis is worth reading if you haven't already. The fexpr/vau reduction semantics are (a subset of) the lambda calculus.