help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: some more material on the Lisp data/code psychedelia


From: Emanuel Berg
Subject: Re: some more material on the Lisp data/code psychedelia
Date: Fri, 17 Jan 2014 02:29:06 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

;; Another classic demo for you all to vibe with.
;;
;; Sort of OO data/method encapsulation, and sort of
;; XML unrestricted markup, to do run-time data/type
;; consistency.
;;
;; (HELP! I'm a Lisp addict!)

;; version one
(setq *typed-symbol* '(0 integerp))

;; version two (combination of types)
(setq *typed-symbol* '(0.0 (lambda (val)
                             (or (floatp val)
                                 (integerp val) ))))
(fset
 '*typed-symbol*
 '(lambda (&optional new-data)
    (progn
      (if new-data
          (if (eval `(,(cadr *typed-symbol*) new-data))
              (setcar *typed-symbol* new-data)
            (error "Wrong type") ))
      (car *typed-symbol*) )))

(*typed-symbol*)     ; 0 (or 0.0), no change
(*typed-symbol* 4)   ; 4, cool
(*typed-symbol* 4.0) ; doesn't work for version one
(*typed-symbol* "disrespecting the type, man") ; error
(*typed-symbol*)     ; still 4 (or 4.0)

;; or, if desire to use a (half) normal variable:

(setq *integer-symbol* 1)

(fset
 '*integer-symbol*
 '(lambda (new-data)
    (if (integerp new-data)
        (setq *integer-symbol* new-data)
      (error "Wrong type: Integers only") )))

*integer-symbol*       ; 1
(*integer-symbol* 2)   ; 2
*integer-symbol*       ; 2
(*integer-symbol* 2.0) ; no floats
(*integer-symbol* "no strings") ; error

-- 
underground experts united:
http://user.it.uu.se/~embe8573


reply via email to

[Prev in Thread] Current Thread [Next in Thread]