On Sat, Jan 16, 2016 at 11:29 PM, Brian Adkins <lojicdot...@gmail.com>
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to