On Wed, May 29, 2013 at 10:20 PM, Patrick Li <patrickli.2...@gmail.com> wrote: > Hi Michele, > > I realized after posting my version of named-let*, that you actually > *cannot* use it to accomplish all of what you want. For that you do need > loop to be a syntactic extension, as mentioned by Jorg. > > For instance, my named-let* macro would not simplify the example you posted > earlier: > > (let loop ((i (some-function)) (ch (string-ref buf (some-function)))) > (do-something) > (if (some-condition-is-true) > (loop (+ i 1) > (string-ref buf (+ i 1))))) > > The key issue underlying this is, when you call (loop), would you like to > call it with one or two arguments? >
Two. Your macro seems good to me. For example, let's say I want to print a string starting from a random position: (define buf "foobar") (named-let* loop ((i (random (string-length buf))) (ch (string-ref buf i))) (display ch) (if (< (+ i 1) (string-length buf)) (loop (+ i 1) (string-ref buf (+ i 1))))) or even better: (named-let* loop ((len (string-length buf)) (i (random len)) (ch (string-ref buf i))) (display ch) (if (< (+ i 1) len) (loop len (+ i 1) (string-ref buf (+ i 1))))) Michele _______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users