LINUX.ORG.RU

История изменений

Исправление 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