[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: with-syntax return error in Guile, not in Kawa or Racket
From: |
Jean Abou Samra |
Subject: |
Re: with-syntax return error in Guile, not in Kawa or Racket |
Date: |
Sun, 05 May 2024 14:48:11 +0200 |
User-agent: |
Evolution 3.52.1 (3.52.1-1.fc40) |
> (base) mattei@mbp-touch-bar Scheme-PLUS-for-Guile % guile
> GNU Guile 3.0.8.99-f3ea8
> Copyright (C) 1995-2022 Free Software Foundation, Inc.
>
> Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
> This program is free software, and you are welcome to redistribute it
> under certain conditions; type `,show c' for details.
>
> Enter `,help' for help.
> scheme@(guile-user)> (define-syntax test-it
> (lambda (stx)
> (syntax-case stx ()
> ((_ term1)
> (with-syntax ((var (syntax->datum #'term1)))
> #'var)))))
> scheme@(guile-user)> (test-it (+ 2 3))
> While compiling expression:
> Syntax error:
> unknown file:#f:#f: encountered raw symbol in macro output in subform + of
> (test-it (+ 2 3))
As the error message says, your macro contains the raw symbol `term1`.
The expression (syntax->datum #'term1) is equivalent to 'term1 .
What's raising the error is not with-syntax itself, it's the fact
that a hygienic macro must return syntax objects, and a raw
symbol is not a syntax object. Kawa and Racket probably have some
fallback where the macro becomes non-hygienic when it returns
raw symbols. But R6RS makes it clear that this is not standard
Scheme. See
https://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html#node_sec_12.2
"""
a syntax object is:
- a pair of syntax objects,
- a vector of syntax objects,
- a nonpair, nonvector, nonsymbol value, or
- a wrapped syntax object
"""
"""
A transformation procedure is a procedure that must accept one argument, a
wrapped syntax object (section 12.2) representing the input, and return a syntax
object (section 12.2) representing the output.
"""
signature.asc
Description: This is a digitally signed message part
- with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/05
- Re: with-syntax return error in Guile, not in Kawa or Racket,
Jean Abou Samra <=
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/05
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/06
- Re: with-syntax return error in Guile, not in Kawa or Racket, Jean Abou Samra, 2024/05/06
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/06
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/06
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/06
- RE: with-syntax return error in Guile, not in Kawa or Racket, Maxime Devos, 2024/05/06
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/06
- RE: with-syntax return error in Guile, not in Kawa or Racket, Maxime Devos, 2024/05/09
- Re: with-syntax return error in Guile, not in Kawa or Racket, Damien Mattei, 2024/05/09