(lambda (ctrl add / ) ( (lambda (__meta__ InSym / ) (repeat (+ (length add) 4) (setq InSym (cdr InSym)) ) (eval (list 'lambda '(name body / ) (list __meta__ __meta__ 'name 'body (list 'quote InSym) ctrl (list 'quote (mapcar '(lambda (a / ) (list 'quote a)) add)) nil))) ) (lambda (__meta__ __name__ __body__ __inSym__ __ctrl__ __add__ __hash__ / __self__) (set __name__ (list __inSym__ (eval (list 'lambda '(/) (list 'quote __body__))) ;; <- data (if __hash__ __hash__ (setq __hash__ (eval (list 'lambda '(/) ''__hash__ (list 'quote __name__))))) (cons (eval (list 'lambda __inSym__ (append (list __ctrl__ ;+++ (setq __self__ (eval (list 'lambda __inSym__ (list '(lambda (__hash__ __expr__ / ) (cond ( (and (eval (car __expr__)) (equal (nth 2 (eval (car __expr__))) __hash__) ) (eval __expr__) ) ('T (princ ">Object not exists anymore<")) ) ) __hash__ (list 'quote (cons __name__ __inSym__)) ) ) ) ) ;+++ (list 'quote __name__) ;+++ (eval ;; update (list 'lambda '(newbody / ) (list __meta__ __meta__ (list 'quote __name__) 'newbody (list 'quote __inSym__) __ctrl__ (list 'quote __add__) __hash__ ) ) ) (eval (list 'lambda '(/) (list (list 'nth 1 __name__)))) ;; -> data ) __add__ __inSym__ ) ) ) __inSym__ ) ) ) __self__ ) ( (lambda (a b / ) (if b (reverse (cdr b)) a) ) (cadr ctrl) (member '/ (reverse (cadr ctrl))) ) ) )