Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun discrete-gen (names)
- "Return a random sample from list names"
- (elt names (random (length names))))
- (defstruct dvg
- generator
- serializer)
- (defmethod call ((dvg dvg))
- (funcall (dvg-generator dvg)))
- (defmethod serialize ((dvg dvg) stream)
- (funcall (dvg-serializer dvg) stream))
- (defun deserialize (stream)
- (let ((*read-eval* t)) (read stream)))
- (defun discrete-variable-generator (names)
- (make-dvg
- :generator (lambda () (discrete-gen names))
- :serializer (lambda (stream) (format stream "#.(discrete-variable-generator ~S)" names))))
- (let ((dvg (discrete-variable-generator #("foo" "bar" "baz"))))
- (call (with-input-from-string (stream (with-output-to-string (stream) (serialize dvg stream)))
- (deserialize stream))))
- ;; --> "foo"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement