gaucheで正規表現を使う
>>(regexp-replace-all #/(a+)/ "abaacaaadae" "A") =>AbAcAdAe
うん。わるくない。
イテレータっぽく使うには
>>(regexp-replace-all #/(a+)/ "abaacaaadae" (lambda (x) (number->string (string-length (x))))) =>1b2c3d1e
"^"がperlの"^A"と同じなんだな。正規表現がほぼperlっぽいのにちょっとつかいずらい。
>>(regexp-replace-all #/(^|\n)(>+)/ ">>aaa\n>>>bb>b\n>ccc" (lambda (x) (string-append (x 1) (number->string (string-length (x 2))) "> "))) =>2> aaa 3> bb>b 1> ccc
という、ことで先ほどのgaucheを用いて標準入力から読み込んでそのまま出力する - 計算機と戯れる日々とあわせて標準入力から読み込んだメールから引用回数でラベルをふってみる。
$ echo -e ">>aaa\n>>>bbb\n>ccc" | gosh -e '(display (regexp-replace-all #/(^|\n)(>+)/ (port->string (standard-input-port)) (lambda (x) (string-append (x 1) (number->string (string-length (x 2))) "> "))))' 2> aaa 3> bbb 1> ccc