Shammer's Philosophy

My private adversaria

Lisp 独自 dictionary version 20111105

Lisp 独自 dictionary version 20111102 - Shammerismの内容で若干余計な部分が見つかったのでちょっと手直し。ちょっとだけスマートになって動作は変わらず。

(defun add-keyvalue-to-dictionary (source key value)
  (let ((new-dictionary (list (cons key value))))
    (dolist (x source)
      (unless (string-equal key (car x))
	(setf new-dictionary (append new-dictionary (list x)))))
    new-dictionary))

(defun add-keypair-to-dictionary (source dotcons-pair)
  (add-keyvalue-to-dictionary source (car dotcons-pair) (cdr dotcons-pair)))

(defun show-dictionary (dictionary)
  (format t "==========~%")
  (let ((dictionary-copied (copy-list dictionary)))
    (dolist (x (sort dictionary-copied #'string<= :key #'car))
      (format t "~A~%" x)))
  (format t "==========~%"))

(defun get-keypair-from-dictionary (target key)
  (dolist (x target)
    (when (string-equal key (car x))
      (format t "~A~%" (cdr x)))))

(defun get-keyvalue-from-dictionary (target key)
  (cdr (get-keypair-from-dictionary target key)))

(defun remove-keypair-from-dictionary (target key)
  (let ((new-dictionary nil))
    (dolist (x target)
      (unless (string-equal key (car x))
	(setf new-dictionary (add-keypair-to-dictionary new-dictionary x))))
    new-dictionary))

そもそも、なぜこれを書こうとしたのかというと、HTTP のクライアントとかで HTTP のヘッダを処理するときにヘッダはいくつ来るかわからないし、正しい形式で来る保証もないので、一旦受理してどこかに退避させてつつ、全て受信が終わった状態でどのヘッダがあってどのヘッダがない、というのを確認したいと思ったから。最初からこのヘッダがあるはずだから HTTP のリクエストやレスポンス用のクラスとかにヘッダを用意しておく、というのだと後々面倒になりそう。全部一箇所にヘッダのセットとして保持することができればよさそう、と思ったのがきっかけ。まずはこれを利用して http 限定の curl みたいなのを書こうと思う。ヘッダはヘッダで解釈、Body 部のみ画面に表示とかできるようにしてみたい。