Захотел я добавить в свой схемоподобный язык давно лежащую на поверхности идею: вычисления в любом переданном контексте (окружении). Дописал 4 строчки кода - добавил новую ядерную особую форму eval-in, которая принимает лямбду (ибо у меня нет окружений как объектов первого класса, но это и не требуется, ибо лямбды содержат их в себе как замыкания) и список, который надо вычислить в окружении этой переданной лямбды. Пример:
; генератор замыканий ;
(defn f (x y) lambda ())
; создание пары объектов-замыканий с разными параметрами ;
(def a (f 1 2) b (f 10 20))
; вычисления в контексте переданного замыкания ;
(print (eval-in a (+ x y)) \n)
(print (eval-in b (def x 30) (+ x y)) \n)
........
=> 3
50
OK
; генератор замыканий, принимающих макрос для выполнения в своем контексте ;
(defn f (x y) lambda (m) m)
; создание пары объектов-замыканий с разными параметрами ;
(def a (f 1 2) b (f 10 20))
; вычисления макросов в контексте переданного замыкания ;
(print (a (macro () + x y)) \n)
(print (b (macro () (def x 30) (+ x y))) \n)
Собственно, про что тема - подскажите/натолкните на мысль/дайте еще идей на тему, что из этого можно выжать имеющимися средствами или при минимальных допиливаниях.