text.trと#\\

koderaさんのGaucheで真似ようとして失敗。

gosh> (use text.tr)
#<undef>
gosh> (string-tr "\\('-')/" "\\\\/'" "_ \\\\")
"\\( - )_"

どうも妙なのでソースを覗いてみると…

;; Gauche-0.8.13/libsrc/text/tr.scm 108-117
(define (start c r)
  (cond ((eof-object? c) (reverse r))
        ((char=? c #\\) (start (read-char) r)) ; !!
        (else (maybe-range c (read-char) r))))
(define (maybe-range c c1 r)
  (cond ((eof-object? c1) (reverse (cons (list 1 c) r)))
        ((char=? c1 #\-) (range c (read-char) r))
        ((char=? c1 #\*) (repeat c (read-char) 0 r))
        ((char=? c1 #\\) (start (read-char) (cons (list 1 c) r))) ; !!
        (else (maybe-range c1 (read-char) (cons (list 1 c) r)))))

問答無用で読み飛ばされる,かわいそうなバックスラッシュなのだった。