Last active
June 23, 2016 18:38
-
-
Save strickinato/21e7ce2fa7bc283a0e0c7bdb4909150e to your computer and use it in GitHub Desktop.
purely functional data structures chapter 2.1 and chapter 2.2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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