История изменений
Исправление Flogger_d, (текущая версия) :
Так! Большое спасибо. Хотя приведенный код и не заработал «As is», он натолкнул на правильную идею. Конечный вариант, который заработал у меня:
(define-syntax match-vars
(syntax-rules ()
(
(match-vars re sample m ...)
((let ((match-str (string-match re sample))).
(if match-str.
(let* ((idx 0).
(get-next-value.
(lambda ().
(set! idx (+ idx 1))
(let ((range (vector-ref match-str idx)))
(substring sample (car range)(cdr range))))))
(begin
(set! m (get-next-value)) ...
(lambda () #t))) (lambda () #f))))
)
)
)
Да, я пользуюсь guile 1.8.7
Исходная версия Flogger_d, :
Так! Большое спасибо. Хотя приведенный код и не заработал «As is», он натолкнул на правильную идею. Конечный вариант, который заработал у меня:
(define-syntax match-vars
(syntax-rules ()
(
(match-vars re sample m ...)
((let ((match-str (string-match re sample))).
(if match-str.
(let* ((idx 0).
(get-next-value.
(lambda ().
(set! idx (+ idx 1))
(let ((range (vector-ref match-str idx)))
(substring sample (car range)(cdr range))))))
(begin
(set! m (get-next-value)) ....
(lambda () #t))) (lambda () #f))))
)
)
)
Да, я пользуюсь guile 1.8.7