CLでSRFI-13 — #:g1

Posted 2012-01-25 12:34:00 GMT

CLでSRFI、今回は、SRFI-13の「String Libraries」です。 身近で良く使う文字列操作系のライブラリです。

動作

(string-join '("foo" "bar" "baz") ">" :suffix)
;=>  "foo>bar>baz>"

(string-join '("foo" "bar" "baz") ">" :infix)
;=>  "foo>bar>baz"

(string-pad "abc" 10 #\.)
;=>  ".......abc"

(defun port-skip (pat iport)
  (declare (optimize (debug 1)))
  (let* ((rv (make-kmp-restart-vector pat))
         (patlen (string-length pat)))
    (labels ((lp (i nchars)
               (if (= i patlen)
                   nchars
                   (let ((c (read-char iport nil :eof)))
                     (if (eq :eof c)
                         c
                         (lp (kmp-step pat rv c i #'char=? 0) (+ nchars 1)))))))
      (lp 0 0))))

(with-input-from-string (in "foo bar baz") (file-position in (port-skip "bar" in) ) (read-line in) ) ;=> " baz" ; T

移植について

シンボルを与えることによって動作を切り換えるものがありますが(string-join等)今回もキーワードにしてみました。

comments powered by Disqus