bug#65132: [PATCH] fix cond1 macro

Timothy Sample <[email protected]>
Newsgroups gmane.lisp.guile.bugs
Message-ID <[email protected]>
Hi all,

Ekaitz Zarraga <[email protected]> writes:

> From ab6e4980ea301b5d1e14a98464e5de3e726984f1 Mon Sep 17 00:00:00 2001
> From: Ekaitz Zarraga <[email protected]>
> Date: Mon, 7 Aug 2023 20:23:42 +0200
> Subject: [PATCH] fix cond1 macro

Just adding some context, as we talked about this on IRC.

If you take the docs example as is,

    (define-syntax cond1
      (syntax-rules (=> else)
        ((cond1 test => fun)
         (let ((exp test))
           (if exp (fun exp) #f)))
        ((cond1 test exp exp* ...)
         (if test (begin exp exp* ...)))
        ((cond1 else exp exp* ...)
         (begin exp exp* ...))))

and invoke it as

    (cond1 else #t)

you get

    Syntax error:
    unknown location: else: bad use of 'else' syntactic keyword in
    subform else of else

This is because ‘else’ matches the ‘(cond1 test exp exp* ...)’ pattern
and gets inserted as the test:

    (if else (begin #t))

This patch puts the more specific ‘else’ pattern before the more general
‘test’ pattern so it has a chance to be matched.


-- Tim
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.