前者がGuileで後者はR6RSで実装されている。文字列をグルグルさせるのならSRFI-13のxsubstringが使えるだろう思い、僕も書いてみた。
(import (rnrs) (srfi :13))
(define s "ひらけ!ポンキッキ")
(define-syntax do-while
(syntax-rules ()
((_ ((var init ...) ...) (pred r) commands ...)
(do ((first #t #f) (var init ...) ...)
((and (not first) pred) r)
commands ...))))
(do-while ((t s (xsubstring t 1))) ((string=? s t) #t) (display t) (newline))
Cのdo ... whileを真似たdo-whileマクロは正直いらんけど…以下は実行結果
$ sash hirake.scm ひらけ!ポンキッキ らけ!ポンキッキひ け!ポンキッキひら !ポンキッキひらけ ポンキッキひらけ! ンキッキひらけ!ポ キッキひらけ!ポン ッキひらけ!ポンキ キひらけ!ポンキッ毎回文字列の比較をするので、当然効率は良くないが、まぁこういうこともできるということで。
No comments:
Post a Comment