Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defmacro switch-with-trigger (trigger &body body)
- (let ((iter (gensym)))
- `(dolist (,iter ',body)
- (if (and ,trigger (eval (first ,iter))) (eval (third ,iter)))
- (if (and (not ,trigger) (eval (first ,iter)))
- (progn
- (setq ,trigger t)
- (eval (second ,iter)))))))
- (defun make-query (column &optional &key name member parents children)
- (let ((res nil) (query nil) (waswhere nil) (addition ""))
- (setq query (format nil "SELECT ~a FROM words" column))
- (switch-with-trigger waswhere
- ((not (eql name nil)) (setq addition (format nil "WHERE name = '~a'" name)) nil)
- ((not (eql member nil)) (setq addition (format nil "WHERE member = '~a'" member))
- (setq addition (format nil "AND member = '~a'" member)))
- ((not (eql parents nil)) (setq addition (format nil "WHERE parents = '~a'" parents))
- (setq addition (format nil "AND parents = '~a'" parents)))
- ((not (eql children nil)) (setq addition (format nil "WHERE children = '~a'" children))
- (setq addition (format nil "AND children = '~a'" children))))
- (setq query (concatenate 'string query " " addition))
- (format t "~%~a~%" query)
- ))
- (setq a nil)
- (switch-with-trigger a
- ((eql nil t) (print 'a) (print 'b))
- ((eql t t) (print 'a) (print 'b))
- ((eql nil nil) (print 'a) (print 'b)))
- (make-query "name" :member "noun")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement