Advertisement
Guest User

Untitled

a guest
Aug 8th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. (defun discrete-gen (names)
  2. "Return a random sample from list names"
  3. (elt names (random (length names))))
  4.  
  5. (defstruct dvg
  6. generator
  7. serializer)
  8.  
  9. (defmethod call ((dvg dvg))
  10. (funcall (dvg-generator dvg)))
  11. (defmethod serialize ((dvg dvg) stream)
  12. (funcall (dvg-serializer dvg) stream))
  13. (defun deserialize (stream)
  14. (let ((*read-eval* t)) (read stream)))
  15.  
  16. (defun discrete-variable-generator (names)
  17. (make-dvg
  18. :generator (lambda () (discrete-gen names))
  19. :serializer (lambda (stream) (format stream "#.(discrete-variable-generator ~S)" names))))
  20.  
  21.  
  22. (let ((dvg (discrete-variable-generator #("foo" "bar" "baz"))))
  23. (call (with-input-from-string (stream (with-output-to-string (stream) (serialize dvg stream)))
  24. (deserialize stream))))
  25. ;; --> "foo"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement