Skip to content

Instantly share code, notes, and snippets.

@strickinato
Last active June 23, 2016 18:38
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 strickinato/21e7ce2fa7bc283a0e0c7bdb4909150e to your computer and use it in GitHub Desktop.
Save strickinato/21e7ce2fa7bc283a0e0c7bdb4909150e to your computer and use it in GitHub Desktop.
purely functional data structures chapter 2.1 and chapter 2.2
;; Put the cursor over progn and hit C-M-x
(progn
(defun exersize_2_1 ()
(defun suffixes (list)
(if (not list)
nil
(cons list (suffixes (cdr list)))
))
(defun printer (list)
(insert (format "%s" list)))
)
(defun exersize_2_2 ()
(setq empty-tree '(nil nil nil) )
(defun tree-is-empty (tree)
(or
(equal tree '(nil empty-tree empty-tree))
(equal tree '(nil nil nil))
)
)
(defun tree-insert (element tree)
(let ((tree-node (car tree))
(left-tree (nth 1 tree))
(right-tree (nth 2 tree)))
(cond ((tree-is-empty tree) (list element empty-tree empty-tree))
((eql tree-node element) tree )
((< element tree-node)
(list tree-node (tree-insert element left-tree) right-tree))
((> element tree-node)
(list tree-node left-tree (tree-insert element right-tree)))
)
)
)
(defun tree-build-from-list-helper (list tree)
(if (not list)
tree
(tree-build-from-list-helper
(cdr list)
(tree-insert (car list) tree)))
)
(defun tree-build-from-list (list)
(tree-build-from-list-helper list empty-tree)
)
(defun tree-member (element tree)
(let ((tree-node (car tree))
(left-tree (nth 1 tree))
(right-tree (nth 2 tree)))
(cond ((tree-is-empty tree) ( nil ))
((eql tree-node element) ( t ) )
((< element tree-node)
(tree-member element left-tree))
((> element tree-node)
(tree-member element right-tree))
)
)
)
(defun printer (tree)
(insert
(apply 'format (cons "root: %s\nleft-tree: %s\nright-tree: %s\n" tree)))
)
)
(defun setup-board ()
(switch-to-buffer-other-window "HAHA")
(erase-buffer)
(switch-to-buffer-other-window "chapter_2.el")
(defun run-exersize (list fun printer)
(switch-to-buffer-other-window "HAHA")
(printer (funcall fun list))
(insert "\n\n")
(switch-to-buffer-other-window "chapter_2.el"))
)
(setup-board)
(exersize_2_1)
(run-exersize '(5 4 2 1) 'suffixes 'printer)
(exersize_2_2)
(setq tree-from-list (tree-build-from-list '(8 5 4 1 40)))
(run-exersize tree-from-list 'identity 'printer)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment