On Mon, 2013-04-01 at 12:39 +0800, Daniel Hartwig wrote:
> 2013/4/1 Nala Ginrut <nalagin...@gmail.com>:
> > I've tried to implement a function to mimic string multiply like Python:
> > "asdf" * 10
> >
> > --------------code----------------
> > (define (str* str n)
> >   (format #f "~{~a~}" (make-list n str)))
> >
> > or
> >
> > (define (str* str n)
> >   (string-join (make-list n str) ""))
> > --------------end-----------------
> >
> >
> 
> Those are both very general mechanisms, it does not suprise me that
> they are less than efficient for very large N.   Although I can not
> comment whether this is a worthwhile issue to address, I offer this
> snippet as a hint of something perhaps better for your specific case:
> 
> (define (str* str n)
>   (call-with-output-string
>     (lambda (p)
>       (let lp ((n n))
>         (unless (zero? n)
>           (display str p)
>           (lp (1- n)))))))
> 

Thanks! Good performance for such a function. ;-)

> Out of curiousity, how does the performance figures you showed compare
> to the Python operator for similarly large values of N?

Python does this very quickly, but I think your hint is enough for that.
My ideas are too elegant-pursuing.

Anyway, string-join is so slowly beyond my expectation.

Regards.



Reply via email to