match-let works as advertised, but a named match-let gives errors for example (match-let (((a . b) '(1 . 2))) (list a b)) => (1 2) but (match-let loop (((a . b) '(1 . 2))) (list a b)) does not work, even though it's basically the above code but instead it's named syntax according to the reference match-let ((pattern expression) …) body match-let variable ((pattern init) …) body this is guile 2.2.4