summaryrefslogtreecommitdiff
path: root/elisp/erbot/erbc-backquote.el
diff options
context:
space:
mode:
Diffstat (limited to 'elisp/erbot/erbc-backquote.el')
-rw-r--r--elisp/erbot/erbc-backquote.el57
1 files changed, 57 insertions, 0 deletions
diff --git a/elisp/erbot/erbc-backquote.el b/elisp/erbot/erbc-backquote.el
new file mode 100644
index 0000000..b61fbec
--- /dev/null
+++ b/elisp/erbot/erbc-backquote.el
@@ -0,0 +1,57 @@
+;; 2004-08-20 T14:53:35-0400 (Friday) D. Goel
+;; This file is work in progress. INCOMLPETE AND BUGGY. DO NOT REQUIRE
+;; THIS FILE IN A BOT.
+
+
+(defvar backquote-symbols (list (intern (string 96)) 'backquote))
+
+
+(defmacro backquote-parse (sexp)
+ "Will parse a sexp and return an equivalent sexp with no backquotes
+in it. Any backquotes in the sexp are converted them to a
+nonbackquoted form. "
+ (cond
+ ((atom sexp) sexp)
+ (t (cons 'quote (backquote-parse-unread sexp)))))
+
+
+
+(defun backquote-parse-unread (sexp)
+ (cond
+ ;;;((vectorp sexp)
+ ;;;(error "this backquote parse does not deal with vectors. "))
+ ((null sexp)
+ nil)
+ ((atom sexp)
+ sexp)
+ ((equal (car sexp) 'quote)
+ (message "Answer is %s" sexp)
+ sexp)
+ ((member (car sexp) backquote-symbols)
+ (backquote-inside-parse (cadr sexp)))
+ ;; None of them:
+ (t (cons (backquote-parse-unread (car sexp))
+ (backquote-parse-unread (cdr sexp))))))
+
+
+
+
+
+
+(defun backquote-inside-parse (sexp)
+ (cond
+ ((null sexp)
+ nil)
+ ((atom sexp)
+ (list 'quote sexp))
+ ((equal (car sexp) ',)
+ `(eval ,(backquote-parse-unread (cadr sexp))))
+ (t (cons (backquote-inside-parse (car sexp))
+ (backquote-inside-parse (cdr sexp))))))
+
+
+
+
+
+
+