Хочу сделать регексы в стиле Tcl - т.е.
regex pattern text match var1 var2...
Т.е. если регекс матчится, то в переменные var1 var2 ...автоматически присваиваются распознанные куски () из паттерна. Пишу такое:
(use-modules (ice-9 regex))
(use-modules (ice-9 syncase))
(define (natural-seq) (let ((i 0)) (lambda () (set! i (+ i 1)) i)))
(define-syntax match-vars
(syntax-rules ()
((_ pattern sample match* ...)
(let ((match-str (string-match pattern sample)))
(if match-str
(let ((ser-num (natural-seq)))
(begin
(for-each (lambda (sym)
(let* ((idx (ser-num))(range (vector-ref match-str idx))(val (substring sample (car range)(cdr range))))
(set! sym val)
'(match* ...))
#t)) #f)))))
А включаешь - не работает. Проблема в том, что (set! sym val) присваевает значение в локальную переменную sym, а не в переменную, идентификатор которой этот sym в данный момент содержит...
Тут что-то простое, наверное, только что именно - не пойму никак...
Поможите кто чем сможет?