test markup
(define mapfirst (fn lst)
(if (nilp lst)
nil
(cons
(fn (first lst))
(mapfirst fn (rest lst))
)
)
)
(define append (x y) (if (nilp x) y (cons (first x) (append (rest x) y))))
(define mapcond (fn lst)
(if (nilp lst)
nil
(if (fn (first lst))
(cons
(first lst)
(mapcond fn (rest lst))
)
(mapcond fn (rest lst))
)
)
)
(define definem (mlambda x (list 'define (first x) (cons 'mlambda (rest x)))))
(definem cond lst (if (nilp lst) nil (list 'if (first (first lst)) (cons 'do (rest (first lst))) (cons 'cond (rest lst)))))
(define atomp (x) (cond ((nilp x) true) ((listp x) false) (true true)))
(definem and lst (if (nilp lst) true (list 'cond (list (first lst) (cons 'and (rest lst))) '(true false))))
(definem backquote (lst) (cond
((nilp lst) nil)
((atomp lst) (list 'quote lst))
((equalp (first lst) 'unquote) (first (rest lst)))
((and (listp (first lst)) (equalp (first (first lst)) 'unquote-slice)) (list 'append (first (rest (first lst))) (list 'backquote (rest lst))))
(true (list 'cons (list 'backquote (first lst)) (list 'backquote (rest lst))))
))