= zexps zexps, similar to g-expressions in Guix, are a way to generate S-expressions that are taggged with store paths. But that's where the similarity ends. To create a zexp, you can use either the full syntax, or the reader macro: [,scheme] ---- #~(foo bar #$baz) ; is identical to: (zexp (foo bar (zexp-unquote baz))) ---- `(zexp-unquote VAL)` returns the value that the zexp (or any compatible record) contains, while gathering the `zexp-unquote`d values used. Like quasiquotation, zexps can use `unquote`, including ``zexp-unquote``d values inside the ``unquote``d code. ``unquote``d code is evaluated when the `zexp` is evaluated. [,scheme] ---- (define world #~,(begin (write "hello") "world")) (define hello #~("hello" ,(string-append "very " "cute") #$world)) ; When hello is used as zexp, it will also write "hello" to the output port. ----