関数やマクロを使用して、key-value 形式のパラメーターを並べたリストを使用して SQL 文を作成したいと考えています。
例えば: (("id" 3) ("version" 3) ("name" "foo") ("age" 10))
のような文字列を返したい
"insert into table ('id','version','name','age') values(3,3,'foo',10);"
これが私のコードです:
(defvar *param* '(("id" 3) ("version" 3) ("name" "foo") ("age" 10)))
(defun dis (elt)
(if (stringp elt)
(concatenate 'string "'" elt "'")
(write-to-string elt)))
(defun tostring (lst)
(if (eql 1 (length lst))
(dis (car lst))
(concatenate 'string (dis (car lst)) "," (tostring (cdr lst)))))
(defun fillinsert (lst)
(let ((keys (mapcar #'car lst))
(values (mapcar #'cadr lst)))
(concatenate 'string
"insert into table ("
(tostring keys)
") values("
(tostring values)
");")))
文字列を作成するために一度だけリストにアクセスする方法がわかりません。ありがとう