Skip to content

Instantly share code, notes, and snippets.

@nicferrier
Created December 9, 2012 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicferrier/4246140 to your computer and use it in GitHub Desktop.
Save nicferrier/4246140 to your computer and use it in GitHub Desktop.
streams and trees in elisp using loop
(let (stack
result
(stream '((START "a")
(START "b")
(START "c")
(TEXT "test 1")
(END "c")
(END "b")
(END "a"))))
(loop for (operator operand) in stream
do (case operator
('START
(let ((element (list operand)))
(if stack
(progn
(setcdr (elt stack 0) (list element))
(push element stack))
(setq stack (list element))
(setq result stack))))
('TEXT
(setcdr (elt stack 0) (list operand)))
('END
(pop stack)))) result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment