;;A package to be able to use ` , ,@ ' as first-class functions
;;AUTODOC: backquote "first-class macros for special quoting symbols ` ' ,"
;;normal functions are defined to be able to use the ` ' ,  functionality
;;as standalone functions, there names being:
;;    ` backquote
;;    , comma
;;    ' quote-quote: quotes twice
;;      quote-split: takes a list as argument and returns a list of the quoted 
;;                   elements
;; This is used as you cannot apply ` , ,@ ', or give these functions as 
;; arguments to other functions, as these are special characters automatically
;; handled by the parser

;;AUTOLOAD: backquote

(defmacro backquote (expr &aux (res (copy '`a)))
  (put res 1 expr)
  res
)    

;;AUTOLOAD: comma

(defmacro comma (expr &aux (res (copy ',a)))
  (put res 1 expr)
  res
)       

;;AUTOLOAD: quote-quote

(defmacro quote-quote (expr &aux (res (copy ''a)) (resi (copy ''a)))
  (put resi 1 expr)
  (put res 1 resi)
  res
) 
;;AUTOLOAD: quote-split

(defun quote-split (args) (map List (lambdam (arg) `(quote-quote ,arg)) args))
