[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