Scheme (R6RS) でひらけ!ポンキッキ

  • 1
    Like
  • 0
    Comment

Scheme を使った記事「lambda を隠した書き方 (35) - 第25回シェル芸勉強会 Q2 -- ひらけ!ポンキッキ」を見てこれは面白そうな問題だと思いました。

R6RS ならばユニコードの範囲の文字を扱えることが保証されているので余計な処理にわずらわされずワンライナに出来そうだったのでやってみました。

$ echo '(import(rnrs))(let*((s"ひらけ!ポンキッキ")(d(string-append s s))(n(string-length s)))(do((i 0(+ i 1)))((= i n))(put-string(current-output-port)d i n)(newline)))' |scheme -q
ひらけ!ポンキッキ
らけ!ポンキッキひ
け!ポンキッキひら
!ポンキッキひらけ
ポンキッキひらけ!
ンキッキひらけ!ポ
キッキひらけ!ポン
ッキひらけ!ポンキ
キひらけ!ポンキッ

ここでは、 Chez Scheme を用いましたがコードは R6RS の範囲内で書いたので他の R6RS 処理系でも同じように動作するはずです。