gaucheで正規表現を使う

gaucherubyのgsub相当の動きをやってみる。

>>(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