newLISP Fan Club

Forum => newLISP in the real world => Topic started by: ssqq on June 16, 2014, 10:50:19 AM

Title: make a function like lambda
Post by: ssqq on June 16, 2014, 10:50:19 AM
I want design a function:


(context 'extend-env)
(extend-env:filter 1 2 3) --> (extend-env:filter 1 2 3)


In this context, some primitive function call would not evalute anything.



How to design this function?
Title: Re: make a function like lambda
Post by: rrq on June 16, 2014, 06:21:45 PM
What about:
(define (extend-env:filter) (cons 'extend-env:filter (args))
or, if you don't want its arguments to be evaluated:
(define-macro (extend-env:filter) (cons 'extend-env:filter (args))
Title: Re: make a function like lambda
Post by: ssqq on June 16, 2014, 07:55:39 PM
Thanks ralph.ronnquist!



I want make a extend enviroment (context) to prevent all primitive function to evualte.


(new Class 'extend-env)

(define (create-funcs f)
  (set (eval f) (append (lambda ()) (list (list 'cons f '(args))))))

(setq built-in (difference
                 (filter eval (symbols))
                 '(define context MAIN Class Tree create-funcs)))

(map create-funcs (map quote (map (fn (x) (sym x 'extend-env)) built-in)))

(save "extend-env.lsp" 'extend-env)