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-05-26

KMRCLを眺める(157) SPLIT-URI-QUERY-STRING

| 08:00 | KMRCLを眺める(157) SPLIT-URI-QUERY-STRING - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(157) SPLIT-URI-QUERY-STRING - わだばLisperになる

今回は、KMRCLのweb-utils.lispからSPLIT-URI-QUERY-STRINGです。

foo=1&bar=2&baz=3のようなクエリパラメータをalistにして返す関数のようで動作は、

(KL:SPLIT-URI-QUERY-STRING "foo=1&bar=2&baz=3")
;⇒ (("foo" . "1") ("bar" . "2") ("baz" . "3"))

のような感じです。

定義は、

(defun split-uri-query-string (s)
  (mapcar
   (lambda (pair)
     (let ((pos (position #\= pair)))
       (when pos
         (cons (subseq pair 0 pos)
               (when (> (length pair) pos)
                 (decode-uri-query-string (subseq pair (1+ pos))))))))
   (delimited-string-to-list s #\&)))

となっていて、

(KL:DELIMITED-STRING-TO-LIST "foo=1&bar=2&baz=3" #\&)
;⇒ ("foo=1" "bar=2" "baz=3")

して、POSITIONで#\=の位置を割り出し、SUBSEQで前半と後半を切り出しつつDECODE-URI-QUERY-STRINGもするというところです。