我想使用一个函数或宏来创建一个 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)
");")))
我不知道如何只创建一次访问列表的字符串。谢谢