Skip to content

Instantly share code, notes, and snippets.

@eshamster
Last active October 20, 2015 16:17
Show Gist options
  • Save eshamster/504bfd3f083acbaea67a to your computer and use it in GitHub Desktop.
Save eshamster/504bfd3f083acbaea67a to your computer and use it in GitHub Desktop.
(defun reconstruct-list (lst fn-elem)
(labels ((rec (result rest)
(if rest
(dolist (elem rest)
(setf result
(cons (if (listp elem)
(rec nil elem)
(funcall fn-elem elem))
result))))
(reverse result)))
(rec nil lst)))
(defun rec-intern-by-args (body-lst arg-lst)
(reconstruct-list body-lst
(lambda (elem)
(if (symbolp elem)
(if (find (symbol-name elem) (mapcar #'symbol-name arg-lst)
:test #'equal)
(intern (symbol-name elem) "KEYWORD")
elem)
elem))))
(defmacro convert-raw-data-one-line (head-line data-line &body body)
(once-only (head-line data-line)
`(list ,@(mapcar
(lambda (process)
(let ((arg-lst (if (listp (car process))
(mapcar (lambda (str)
(intern (string-upcase str) "KEYWORD"))
(car process))
'(:it)))
(find-lst (if (listp (car process))
(car process)
(list (car process)))))
`((lambda (,@arg-lst)
,@(rec-intern-by-args (cdr process) arg-lst))
,@(mapcar
(lambda (arg)
`(find-target-value ,arg ,head-line ,data-line))
find-lst))))
body))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment