(load "../lang/dlambda.lisp")
(load "../lang/functions.lisp")

(defmacro keys (&rest fields)
  `(let ,(mapcar 'list fields)
    (dlambda
      (:get (field) (eval field))
      (:set (field value) (set field value)))))

(defun process-data (data)
  (let ((one (call data :get 'one))
        (two (call data :get 'two))
        (three (call data :get 'three)))
    (list one two three)))

(setq data (keys one two three))
(call data :set 'one "goodbye")
(call data :set 'two "key")
(call data :set 'three "!")
(process-data data)
