小粒つながりで、こういうのも良いかも。あんまりスッキリしないけど。
(alist->query-string '((hoge . 1)(fuga . 2)(foo . bar))) ;; -> "?hoge=1&fuga=2&foo=bar"
(use srfi-13) (use util.list) (use rfc.uri) (define (alist->query-string alist) (let1 ues (^v (uri-encode-string (x->string v))) (string-append "?" (string-concatenate (intersperse "&" (fold-right (^ (e acc) (cons (string-append (ues (car e)) "=" (ues (cdr e))) acc)) '() alist))))))
それともこんなん。
(use srfi-1) (use rfc.uri) (define (alist->query-string alist) (let1 ues (^v (uri-encode-string (x->string v))) (pair-fold (^ (pr acc) (let1 e (car pr) (string-append acc (ues (car e)) "=" (ues (cdr e)) (if (null? (cdr pr)) "" "&") ))) "?" alist)))
こういうのって別に中身なんてどうでも良いんだけど、なぜか楽しい。
追記
(define (query-compose query) (string-join (map (cut string-join <> "=") query) "&")) (query-compose '(("hoge" "1")("fuga" "foo"))) ;; "hoge=1&fuga=foo"うわー、すっきり。
0 件のコメント:
コメントを投稿