(require 'stdlib) (defun set-type (sym value) (put sym 'type value)) (defun get-type (sym) (get sym 'type)) (define typeof get-type) (defun typed? (sym) (not (null (get-type sym)))) (defmacro defstring (sym value) `(progn (defvar ,sym ,value) (set-type ',sym 'string))) (defun dump (sym) (printf "(%s %s)\n" (symbol-name sym) (symbol-plist sym))) (defvar aap "hopsa") (dump 'aap) (puts (get-type 'aap)) ; () == nil (set-type 'aap 'eloquent) (dump 'aap) (puts (get-type 'aap)) (defstring noot "lalala") (dump 'noot) (puts (get-type 'noot)) (define (peek . form) (printf ";;; %s\n" form) (last form)) (puts (peek 'lala (+ 1 1)))