Guest User

Untitled

a guest
Jun 11th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 0.54 KB | None | 0 0
  1. (defmacro retry-times (n delay-secs form)
  2.   (let ((n-sym (gensym "n"))
  3.         (c-sym (gensym "c"))
  4.         (loop-tag-sym (gensym "loop-tag")))
  5.     `(let ((,n-sym ,n))
  6.        (tagbody ,loop-tag-sym
  7.         (handler-bind
  8.             ((error (lambda (,c-sym)
  9.                       (if (<= (decf ,n-sym) 0)
  10.                           (error ,c-sym)
  11.                           (progn
  12.                             (sleep ,delay-secs)
  13.                             (go ,loop-tag-sym))))))
  14.           (return-from ,loop-tag-sym (progn ,@form)))))))
Add Comment
Please, Sign In to add comment