Hi,I've traced something that is not entirely a bug, but which was a little surprise for me. It has to do with the extensions that guile provides to the Scheme language -- namely, uniform vectors and arrays.
The (ice-9 match) module offers the syntax
(match #(1 2 3)
(#(a b c)
(list a b c)))
;===> (1 2 3)
However, none of the following behaves as one could expect:
(match #u8(1 2 3)
(#u8(a b c)
(list a b c)))
(match #2((1 2)(3 4))
(#2((a b)(c d))
(list a b c d)))
(match #u8(1 2 3); this is perhaps questionable, but
(#(a b c) ; i add it for a discussion
(list a b c)))
After looking into the source of the pattern matcher, I've found out that the problem is probably situated deeper: while it is possible to define macros with regular vectors, like that:
(define-syntax nv
(syntax-rules ()
((nv #(v ...))
(list v ...))))
it doesn't work if we replace the #(v ...) with #u8(v ...), for instance.
Best regards,
M.