Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-03-01

KMRCLを眺める STRING-SUBSTITUTE (101)

| 22:46 | KMRCLを眺める STRING-SUBSTITUTE (101) - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める STRING-SUBSTITUTE (101) - わだばLisperになる

今回はKMRCLのstrings.lispから、STRING-SUBSTITUTEです。

動作は、

(KL:STRING-SUBSTITUTE "foofoofoo" "foo" "bar")
;⇒ "barbarbar"

という感じで、Rubyや、Perlでいうgsubになるでしょうか。

定義は、

(defun string-substitute (string substring replacement-string)
  "String substitute by Larry Hunter. Obtained from Google"
  (let ((substring-length (length substring))
        (last-end 0)
        (new-string ""))
    (do ((next-start
          (search substring string)
          (search substring string :start2 last-end)))
        ((null next-start)
         (concatenate 'string new-string (subseq string last-end)))
      (setq new-string
        (concatenate 'string
          new-string
          (subseq string last-end next-start)
          replacement-string))
      (setq last-end (+ next-start substring-length)))))

となっていて、SEARCHで目的の文字列の開始位置を探し、代りになる文字で置き換えつつ繋いで行く感じです。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100301