On Sat, Jan 16, 2016 at 11:29 PM, Brian Adkins <[email protected]>
wrote:

>
> I'm happy to run experiments and report timings though.
>
>
Since the profile suggests that string-trim is the biggest culprit
(followed by fprintf), try using this specialized version of string-trim
locally:

;; ===
(require racket/unsafe/ops)

(define (string-trim s)
  (define len (string-length s))

  (let loop ([i 0])
    (cond [(unsafe-fx< i len)
           (cond [(char-whitespace? (unsafe-string-ref s i))
                  (loop (unsafe-fx+ i 1))]
                 [else
                  (let inner ([j (unsafe-fx- len 1)])
                    (cond [(char-whitespace? (unsafe-string-ref s j))
                           (inner (unsafe-fx- j 1))]
                          [else
                           (substring s i (unsafe-fx+ j 1))]))])]
            [else
             s])))
;; ===

Instead of fprintf-ing the tabbed values, you might try (displayln
(string-join fields "\t")). Of course, that requires building a list of
strings, which has its own cost.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to