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-21

KMRCLを眺める(155) MAKE-URL

| 18:39 | KMRCLを眺める(155) MAKE-URL - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(155) MAKE-URL - わだばLisperになる

今回は、KMRCLのweb-utils.lispからMAKE-URLです。

名前のとおりURLを生成するのに利用します。

使い方は、

(KL:MAKE-URL "page" 
             :FORMAT :HTML
             :VARS '(("foo" . "1")
                     ("bar" . "2"))
             :ANCHOR "baz")
;⇒ "http://example.com/page?foo=1&bar=2#baz"

という風に、パラメータをalist、アンカを文字列で渡せます

定義は、

(defun make-url (page-name &key (base-dir *base-url*) (format :html) vars anchor)
  (let ((amp (case format
               (:html
                "&")
               ((:xml :ie-xml)
                "&"))))
    (concatenate 'string
      base-dir page-name
      (if vars
          (let ((first-var (first vars)))
            (concatenate 'string
              "?"  (car first-var) "=" (cdr first-var)
              (mapcar-append-string
               #'(lambda (var)
                   (when (and (car var) (cdr var))
                     (concatenate 'string
                       amp (string-downcase (car var)) "=" (cdr var))))
               (rest vars))))
        "")
      (if anchor
          (concatenate 'string "#" anchor)
        ""))))

MAPCAR-APPEND-STRINGは以前眺めたKMRCL内のlists.lispで定義されています。