Advertisement
Guest User

Untitled

a guest
May 28th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.38 KB | None | 0 0
  1. (defmacro switch-with-trigger (trigger &body body)
  2.   (let ((iter (gensym)))
  3.     `(dolist (,iter ',body)
  4.        (if (and ,trigger (eval (first ,iter))) (eval (third ,iter)))
  5.        (if (and (not ,trigger) (eval (first ,iter)))
  6.        (progn
  7.          (setq ,trigger t)
  8.          (eval (second ,iter)))))))
  9.  
  10. (defun make-query (column &optional &key name member parents children)
  11.   (let ((res nil) (query nil) (waswhere nil) (addition ""))
  12.     (setq query (format nil "SELECT ~a FROM words" column))
  13.     (switch-with-trigger waswhere
  14.              ((not (eql name nil)) (setq addition (format nil "WHERE name = '~a'" name)) nil)
  15.              
  16.              ((not (eql member nil)) (setq addition (format nil "WHERE member = '~a'" member))
  17.               (setq addition (format nil "AND member = '~a'" member)))
  18.              
  19.              ((not (eql parents nil)) (setq addition (format nil "WHERE parents = '~a'" parents))
  20.               (setq addition (format nil "AND parents = '~a'" parents)))
  21.              
  22.              ((not (eql children nil)) (setq addition (format nil "WHERE children = '~a'" children))
  23.               (setq addition (format nil "AND children = '~a'" children))))
  24.     (setq query (concatenate 'string query " " addition))
  25.     (format t "~%~a~%" query)
  26.     ))
  27.  
  28.  
  29. (setq a nil)
  30.  
  31. (switch-with-trigger a
  32.              ((eql nil t) (print 'a) (print 'b))
  33.              ((eql t t) (print 'a) (print 'b))
  34.              ((eql nil nil) (print 'a) (print 'b)))
  35.  
  36. (make-query "name" :member "noun")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement