Advertisement
Nuparu00

tree-tree-tree-tree-tree-tree-tree-tree-tree-tree

Nov 8th, 2021
2,365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 18.47 KB | None | 0 0
  1. ;;Lecture 2
  2.  
  3. ;;5
  4. (defun hypotenuse (x y) (sqrt (+ (* x x) (* y y))))
  5.  
  6. ;2
  7. (defun circle-area (r) (* pi r r))
  8.  
  9. (defun cone-volume (r h) (* 1/3 h (circle-area r)))
  10.  
  11. ;;7
  12. (defun signumb (x)
  13.   (if (> x 0) 1
  14.     (if (= x 0 ) 0 -1)))
  15.  
  16. ;;8
  17. (defun mini (x y)
  18.   (if (< x y) x y))
  19.  
  20. ;;9
  21. (defun maxi (x y)
  22.   (if (> x y) x y))
  23.  
  24. ;;10
  25. (defun coord-dst (A-x A-y B-x B-y)
  26.   (let ((x (- A-x B-x)) (y (- A-y B-y)))
  27.     (hypotenuse x y)))
  28.  
  29. ;;11
  30. (defun trianglep (a b c)
  31.   (and (tri-side-p a b c) (tri-side-p b c a) (tri-side-p c a b))
  32.   )
  33.  
  34. (defun tri-side-p (a b c)
  35.   (> (+ a b) c))
  36.  
  37. ;;12
  38. (defun heron (a b c)
  39.   (let ((s (/ (+ a b c) 2)))
  40.     (sqrt (* s (- s a) (- s b) (- s c)))))
  41. ;;13
  42. (defun heron-cart(A-x A-y B-x B-y C-x C-y)
  43.   (heron (point-dst A-x A-y B-x B-y) (point-dst B-x B-y C-x C-y) (point-dst C-x C-y A-x A-y)))
  44.  
  45.  
  46. ;;Lecture 3
  47.  
  48. ;;8
  49. (defun get-gcd (a b)
  50.   (if (= b 0) a (get-gcd b (mod a b))))
  51.  
  52. ;;13
  53. (defun digit-count (x) (digit-count-internal x 0))
  54.  
  55. (defun digit-count-internal (x count)
  56.        (if (< x 1) count (digit-count-internal (/ x 10) (+ count 1))))
  57.  
  58. ;;Returns the digit at Nth position from the right without using mod/rem, starts from 1
  59. (defun digit (x n)
  60.         (floor (* (- (/ x (power 10 n))
  61.             (floor (/ x (power 10 n))) ) 10)) )
  62.  
  63. ;;12
  64. (defun power (x n) (power-internal x n 1))
  65.  
  66. (defun power-internal (x n res) (if (> n  0) (power-internal x (- n 1) (* res x)) res))
  67.  
  68. (defun digit-sum (x) (digit-sum-internal x (digit-count x) 1 0))
  69.  
  70. (defun digit-sum-internal (x length pos sum)
  71.   (if (> pos length) sum (digit-sum-internal x length (+ pos 1) (+ sum (digit x pos)))))
  72.  
  73. ;;Uses digit-sum --> see 5 lines above
  74. (defun multiply-of-9-internal-p (x) (if (>= x 10) (multiply-of-9-internal-p (digit-sum x)) (= x 9) ))
  75.  
  76. (defun multiply-of-9-p (x) (multiply-of-9-internal-p (digit-sum x)))
  77.  
  78. ;;5
  79. (defun ellipse-area (a b) (if (eql b t) (ellipse-area a a) (* pi a b)))
  80.  
  81. ;;9
  82. (defun heron-sqrt (a x dif)
  83.   (if (<= (abs-delta (power x 2) a) dif) (* x 1.0)
  84.       (heron-sqrt a (/ (+ x (/ a x)) 2) dif)  
  85. ))
  86.  
  87. (defun abs-delta (a b)
  88.   (abs (- a b)))
  89.  
  90. ;;14
  91. (defun leibniz (deviation)
  92.   (leibniz-internal (/ deviation 10) 1 -1 3))
  93.  
  94. (defun leibniz-internal (deviation prev m n)
  95.   (let ((fraction (/ m n)))
  96.     (if (<= (abs fraction) deviation) (* 4.0 prev)
  97.       (leibniz-internal deviation (+ prev fraction) (- m) (+ 2 n)))))
  98. ;;10
  99. (defun range-sum-dumb (a b)
  100.   (if(> a b) 0
  101.     (if (= a b) a
  102.       (+ b (range-sum-dumb a (- b 1))))))
  103. ;;11
  104. (defun range-sum (a b)
  105.   (if (> a b) 0 (range-sum-internal a b a)))
  106.  
  107. (defun range-sum-internal (a b prev)
  108.   (if (= a b) prev (range-sum-internal a (- b 1) (+ prev b))))
  109.  
  110. ;;Lecture 4
  111.  
  112. (defun fib (n)
  113.   (fib-tr n 1 0))
  114.  
  115. (defun fib-tr (n next result)
  116.   (cond ((= n 0) result)
  117.         (t (fib-tr (- n 1) (+ next result) next))))
  118.  
  119. (defun power2 (n)
  120.   (* n n))
  121.  
  122. (defun fast-power (a n)
  123.   (fast-power-iter a n 1))
  124.        
  125. (defun fast-power-iter (a n ir)
  126.   (cond ((= n 0) ir)
  127.         ((evenp n)
  128.          (power2 (fast-power-iter a (/ n 2) ir)))
  129.         (t (fast-power-iter a (- n 1) (* a ir)))))
  130.  
  131. ;;Smaller first, larger second
  132. (defun dividesp (x y)
  133.   (= (mod y x) 0))
  134.  
  135. (defun remc (x y)
  136.   (- x (* y (truncate (/ x y)))))
  137.  
  138. (defun primep (x)
  139.   (prime-iter-p x (floor (/ x 2))))
  140.  
  141. (defun prime-iter-p (x check)
  142.   (or (<= check 1) (and (not (dividesp check x)) (prime-iter-p x (- check 1)))))
  143.  
  144. (defun perfectp (x)
  145.   (perfect-iter-p x (floor (/ x 2)) 0))
  146.  
  147. (defun perfect-iter-p (x check ir)
  148.   (or
  149.    (and (<= check 0) (= ir x))
  150.    (and (> check 0)
  151.         (if (dividesp check x)
  152.             (and (<= (+ check ir) x) (perfect-iter-p x (- check 1) (+ ir check)))
  153.           (perfect-iter-p x (- check 1) ir)))))
  154.  
  155. (defun pascal (row e)
  156.   (if (or (< e 0) (> e row) (and (= row 0) (not (= e 0))))
  157.       0
  158.     (if (= row 0) 1
  159.       (+ (pascal (- row 1) (- e 1)) (pascal (- row 1) e)))))
  160.  
  161. (defun fibbi (n)
  162.   (fibbi-iter n 0 1))
  163.  
  164. (defun fibbi-iter (n current next)
  165.   (if (<= n 0) current (fibbi-iter (- n 1) next (+ current next))))
  166.  
  167. ;;Lecture 5
  168.  
  169. (defun my-make-list (length elem)
  170.   (if (= length 0)
  171.       ()
  172.     (cons elem (my-make-list (- length 1) elem))))
  173.  
  174. (defun my-length (list)
  175.   (if list
  176.       (+ (my-length (cdr list)) 1) 0))
  177.  
  178. (defun point (x y)
  179.   (cons x y))
  180.  
  181. (defun point-x (pt)
  182.   (car pt))
  183. (defun point-y (pt)
  184.   (cdr pt))
  185.  
  186. (defun point-dst (A B)
  187.   (sqrt (+ (expt (- (point-x A) (point-x B)) 2)
  188.            (expt (- (point-y A) (point-y B)) 2))))
  189.  
  190. ;;1
  191. (defun right-triangle-p (A B C)
  192.   (let ((a-length (point-dst B C))
  193.         (b-length (point-dst A C))
  194.         (c-length (point-dst A B))) ;;Stores the lengths of the sides
  195.     (let ((hypo (max a-length b-length c-length)) ;;Max
  196.           (leg-a (max (min a-length b-length) (min (max a-length b-length) c-length))) ;;Mid
  197.           (leg-b (min a-length b-length c-length))) ;;Min
  198.       (= (+ (expt leg-a 2) (expt leg-b 2)) (expt hypo 2)))))
  199.  
  200. ;;2
  201.  
  202. (defun op-vertex (A B)
  203.   (point (+ (point-x B) (- (point-x B) (point-x A)))
  204.          (+ (point-y B) (- (point-y B) (point-y A)))))
  205.  
  206. ;;3/4
  207.  
  208. (defun fraction (n d)
  209.   (let ((div (gcd n d)) (neg (if (and (< n 0) (< d 0)) -1 1)))
  210.     (cons (* (/ n div) neg) (* (/ d div) neg))))
  211.  
  212. (defun numer (frac)
  213.   (car frac))
  214. (defun denom (frac)
  215.   (cdr frac))
  216.  
  217. (defun frac-+ (x y)
  218.   (fraction (+ (* (numer x) (denom y))
  219.                (* (numer y) (denom x)))
  220.             (* (denom x) (denom y))))
  221. (defun frac-* (x y)
  222.   (fraction (* (numer x) (numer y))
  223.             (* (denom x) (denom y))))
  224.  
  225. (defun frac-neg (x)
  226.   (fraction (* (numer x) -1)
  227.             (denom x)))
  228.  
  229. (defun frac-opp (x)
  230.   (fraction (denom x)
  231.             (numer x)))
  232.  
  233. (defun frac-- (x y) (frac-+ x (frac-neg y)))
  234.  
  235. (defun frac-/ (x y) (frac-* x (frac-opp y)))
  236.  
  237.  
  238. ;;5
  239. (defun interval (l u)
  240.   (cons l u))
  241.  
  242. (defun lower-bound (interval)
  243.   (car interval))
  244.  
  245. (defun upper-bound (interval)
  246.   (cdr interval))
  247.  
  248. (defun number-in-interval-p (n interval)
  249.   (and (>= n (lower-bound interval))
  250.        (<= n (upper-bound interval))))
  251.  
  252. (defun interval-intersection (a b)
  253.   (let ((l (max (lower-bound a) (lower-bound b)))
  254.         (u (min (upper-bound a) (upper-bound b))))
  255.     (if (< u l) nil (interval l u))))
  256.  
  257. ;;6
  258. ;;(let ((end (cons 3 4))) (cons 1 (cons end (cons end 2))))
  259.  
  260. ;;7
  261.  
  262. (defun proper-list-p (list)
  263.   (cond ((not list) t)
  264.         ((consp list) (proper-list-p (cdr list)))
  265.         (t nil)))
  266.  
  267. ;;8
  268. (defun my-make-list-iter (length elem)
  269.   (my-make-list-internal length elem ()))
  270.  
  271.  
  272. (defun my-make-list-internal (length elem prev)
  273.   (if (= length 0)
  274.       prev
  275.     (my-make-list-internal (- length 1) elem (cons elem prev))))
  276. ;;9
  277. (defun make-ar-seq-list (start d length)
  278.   (if (= length 0) () (cons start (make-ar-seq-list (+ start d) d (- length 1)))))
  279.  
  280. ;;10
  281. (defun make-ar-seq-list-iter (start d length)
  282.   (make-ar-seq-list-internal (+ start (* d (- length 1))) d length ()))
  283.  
  284. (defun make-ar-seq-list-internal (end d length prev)
  285.   (if (= length 0) prev
  286.     (make-ar-seq-list-internal (- end d) d (- length 1) (cons end prev))))
  287.  
  288. ;;11
  289.  
  290. (defun make-geom-seq-list (start q length)
  291.   (if (= length 0) () (cons start (make-geom-seq-list (* start q) q (- length 1)))))
  292.  
  293. ;;12
  294.  
  295. (defun make-geom-seq-list-iter (start q length)
  296.   (make-geom-seq-list-internal (* start (expt q (- length 1))) q length ()))
  297.  
  298. (defun make-geom-seq-list-internal (end q length prev)
  299.   (if (= length 0) prev
  300.     (make-geom-seq-list-internal (/ end q) q (- length 1) (cons end prev))))
  301.  
  302. ;;Lecture 6
  303.  
  304. ;;1
  305. (defun last-pair (l)
  306.   (if (consp l)
  307.       (if (cdr l)
  308.           (last-pair (cdr l))
  309.         l)
  310.     nil))
  311.  
  312. ;;2
  313. (defun my-copy-list (orig)
  314.   (cond ((or (eql orig nil) (not (consp orig))) nil)
  315.         (t (cons (car orig) (my-copy-list (cdr orig))))))
  316.  
  317. ;;3
  318. (defun equal-lists-p (a b)
  319.   (or (and (null a) (null b))
  320.       (and (consp a)
  321.            (consp b)
  322.            (eql (car a) (car b))
  323.            (or
  324.             (and
  325.              (not (cdr a))
  326.              (not (cdr b)))
  327.             (equal-lists-p (cdr a) (cdr b))))))
  328.  
  329. ;;4
  330. (defun my-remove (e list)
  331.   (cond ((or (eql list nil) (not (consp list))) nil)
  332.         ((eql e (car list)) (my-remove e (cdr list)))
  333.         (t (cons (car list) (my-remove e (cdr list))))))
  334.  
  335. ;;5
  336.  
  337. (defun remove-nthcdr (n list)
  338.   (cond ((or (eql list nil) (not (consp list)) (<= n 0)) nil)
  339.         (t (cons (car list) (remove-nthcdr (- n 1) (cdr list))))))
  340.  
  341.  
  342. ;;6
  343. (defun each-other (list n)
  344.   (cond ((null list) nil)
  345.         ((= n 0) (cons (car list) (each-other (cdr list) 1)))
  346.         (t (each-other (cdr list) 0))))
  347.  
  348.  
  349. ;;7
  350. ;;For non-negative whole numbers only
  351. (defun factorials (n)
  352.   (factorials-internal n 0 0))
  353.  
  354. (defun factorials-internal (n prev i)
  355.   (cond ((= n i) ())
  356.         ((<= i 0) (cons 1 (factorials-internal n 1 1)))
  357.         (t (cons (* prev i) (factorials-internal n (* prev i) (+ i 1))))))
  358.  
  359. ;;8
  360. (defun fib-list (n)
  361.   (fib-list-internal n 0 0 0))
  362.  
  363. (defun fib-list-internal (n prev prevprev i)
  364.   (cond ((= n i) ())
  365.         ((= i 0) (cons 1 (fib-list-internal n 1 0 (+ i 1))))
  366.         (t (cons (+ prev prevprev) (fib-list-internal n (+ prev prevprev) prev (+ i 1))))))
  367.  
  368. ;;9
  369. (defun list-tails (list)
  370.   (cond ((or (eql list nil) (not (consp list))) (list nil))
  371.         (t (cons list (list-tails (cdr list))))))
  372.  
  373. ;10
  374.  
  375. (defun list-sum (list)
  376.    (cond ((or (eql list nil) (not (consp list))) 0)
  377.         (t (+ (car list) (list-sum (cdr list))))))
  378.  
  379. ;;11
  380.  
  381. (defun my-sum-help (list n len)
  382.   (if (>= n len)
  383.       0
  384.     (+ (my-nth n list) (my-sum-help (+ n 1) len))))
  385. (defun my-sum (list)
  386.   (my-sum-help list 0 (my-length list)))
  387.  
  388.  
  389. (defun my-nth (n list)
  390.   (if (= n 0)
  391.       (car list)
  392.     (my-nth (- n 1) (prog1 (cdr list) (write-string "X ")))))
  393.  
  394. (defun my-length (list)
  395.   (if (eql list nil)
  396.       0
  397.     (+ (my-length (prog1 (cdr list) (write-string "X "))) 1)))
  398.  
  399. ;;The answer is 10 times, after that thrown:  The call (#<Function MY-SUM-HELP 4200008F1C> 1 10) does not match definition (#<Function MY-SUM-HELP 4200008F1C> LIST N LEN).
  400.  
  401. ;12
  402. (defun subtract-lists-2 (a b)
  403.   (cond ((and (null a) (null b)) nil)
  404.         ((or (null a) (null b)) (error "Trying to subtract lists with different lengths!"))
  405.         (t (cons (- (car a) (car b)) (subtract-lists-2 (cdr a) (cdr b))))))
  406. ;13
  407. (defun dot-product (a b)
  408.   (dot-product-iter a b 0))
  409.  
  410. (defun dot-product-iter (a b res)
  411.   (if (null a)
  412.       res
  413.     (dot-product-iter (cdr a) (cdr b) (+ res (* (car a) (car b))))))
  414.  
  415. ;;14
  416.  
  417. (defun vector-length (a)
  418.   (vector-length-iter a 0))
  419.  
  420. (defun vector-length-iter (a res)
  421.   (if (null a)
  422.       (sqrt res)
  423.     (vector-length-iter (cdr a) (+ res (expt (car a) 2)))))
  424.  
  425.  
  426. ;;15
  427.  
  428. (defun my-remove-duplicates (a)
  429.   (my-remove-duplicates-iter a a))
  430.  
  431. (defun my-remove-duplicates-iter (a res)
  432.   (if (null a)
  433.       res
  434.     (my-remove-duplicates-iter (cdr a) (my-remove-duplicate (car a) res 0))))
  435.  
  436. (defun my-remove-duplicate (e list count)
  437.   (cond ((or (eql list nil) (not (consp list))) nil)
  438.         ((eql e (car list)) ( if (> count 0)
  439.                                 (my-remove-duplicate e
  440.                                                      (cdr list)
  441.                                                      (+ count 1))
  442.                               (cons (car list) (my-remove-duplicate e
  443.                                                                     (cdr list)
  444.                                                                     (+ count 1)))))
  445.         (t (cons (car list) (my-remove-duplicate e (cdr list) count)))))
  446.  
  447.  
  448.  
  449. ;;16
  450. (defun my-union (a b)
  451.   (my-remove-duplicates (append-2 a b)))
  452.  
  453.  
  454. (defun append-2 (list1 list2)
  455.   (if (null list1)
  456.       list2
  457.     (cons (car list1)
  458.           (append-2 (cdr list1) list2))))
  459.  
  460. (defun contains (a e)
  461.   (and (consp a) (not (null a)) (or (eql (car a) e) (contains (cdr a) e))))
  462.  
  463. ;;17
  464. ;;(defun equal-sets-p (list1 list2)
  465.   ;;(or (eql list1 list2) (not (or list1 list2)) (and (contains list1 (car list2)) (contains list2 (car list1)) (equal-sets-p (cdr list1) (cdr list2)))))
  466.  
  467. (defun elementp (x list)
  468.   (and (not (null list))
  469.        (or (eql x (car list))
  470.            (elementp x (cdr list)))))
  471.  
  472.  
  473. (defun my-subsetp (list1 list2)
  474.   (if (null list1)
  475.       t
  476.     (and (elementp (car list1) list2)
  477.          (my-subsetp (cdr list1) list2))))
  478.  
  479. (defun equal-sets-old-p (list1 list2)
  480.   (and (my-subsetp list1 list2) (my-subsetp list2 list1)))
  481.  
  482. (defun merge-sort (list)
  483.   (let* ((len (length list))
  484.          (len/2 (floor (/ len 2)))
  485.          (list2 (nthcdr len/2 list))
  486.          (list1 (ldiff list list2)))
  487.     (if (<= len 1)
  488.         list
  489.       (merge-lists (merge-sort list1) (merge-sort list2)))))
  490. (defun merge-lists (l1 l2)
  491.   (cond ((null l1) l2)
  492.         ((null l2) l1)
  493.         ((<= (car l1) (car l2))
  494.          (cons (car l1) (merge-lists (cdr l1) l2)))
  495.         (t (cons (car l2) (merge-lists l1 (cdr l2))))))
  496.  
  497. (defun equal-sets-p (list1 list2)
  498.   (equal-sets-iter-p (merge-sort list1) (merge-sort list2)))
  499.  
  500. (defun equal-sets-iter-p (list1 list2)
  501.   (or (and (not (or list1 list2))
  502.            (eql list1 list2))
  503.       (and (eql (car list1) (car list2))
  504.            (equal-sets-iter-p (cdr list1) (cdr list2)))))
  505.  
  506.  
  507. ;;18
  508.  
  509. (defun contains-sorted-set (lst n)
  510.   (and (not (null lst))
  511.        (not (> (car lst) n))
  512.        (or
  513.         (= (car lst) n)
  514.         (contains-sorted-set (cdr lst) n))
  515.        ))
  516.  
  517. (defun add-to-set (set n)
  518.   (merge-sort (cons n set)))
  519.  
  520. ;;19
  521.  
  522. (defun flatten (a)
  523.   (cond ((not a) nil)
  524.         ((consp (car a)) (append-2 (flatten (car a)) (flatten (cdr a))))
  525.         (t (cons (car a) (flatten (cdr a))))
  526.     ))
  527.  
  528. ;;20
  529.  
  530. (defun deep-reverse (a)
  531.   (deep-reverse-internal a ()))
  532.  
  533. (defun deep-reverse-internal (a copy)
  534.   (cond ((null a) copy)
  535.         ((proper-list-p (car a)) (deep-reverse-internal (cdr a) (cons (deep-reverse-internal (car a) ()) copy)))
  536.         (t (deep-reverse-internal (cdr a) (cons (car a) copy)))))
  537.  
  538. ;;Lecture 7
  539.  
  540. (defun binary-tree-node (val left-child right-child)
  541.   (list 'binary-tree val left-child right-child))
  542.  
  543. (defun left-child (node)
  544.   (caddr node))
  545. (defun right-child (node)
  546.   (cadddr node))
  547.  
  548. (defun tree-type (node)
  549.   (car node))
  550. (defun treep (node)
  551.   (eql (tree-type node) 'tree))
  552. (defun binary-tree-p (node)
  553.   (eql (tree-type node) 'binary-tree))
  554.  
  555. (defun bt-node-value (node)
  556.   (cadr node))
  557.  
  558. (defun my-adjoin (elem tree)
  559.   (if (null tree)
  560.       (binary-tree-node elem nil nil)
  561.     (let ((val (bt-node-value tree))
  562.           (left (left-child tree))
  563.           (right (right-child tree)))
  564.       (cond ((= elem val) tree)
  565.             ((< elem val) (binary-tree-node val
  566.                                             (my-adjoin elem left)
  567.                                             right))
  568.             (t (binary-tree-node val
  569.                                  left
  570.                                  (my-adjoin elem right)))))))
  571.  
  572. ;;1
  573. ;;(binary-tree-node 5 (binary-tree-node 2 (binary-tree-node 1 nil nil) (binary-tree-node 3 nil (binary-tree-node 4 nil nil))) (binary-tree-node 7 (binary-tree-node 6 nil nil) (binary-tree-node 8 nil nil)))
  574.  
  575. ;;2
  576. ;;(my-adjoin 8 (my-adjoin 6 (my-adjoin 7 (my-adjoin 4 (my-adjoin 3 (my-adjoin 1 (my-adjoin 2 (my-adjoin 5 ()))))))))
  577. ;;(my-adjoin 8 (my-adjoin 6 (my-adjoin 7 (my-adjoin 3 (my-adjoin 4 (my-adjoin 1 (my-adjoin 2 (my-adjoin 5 ()))))))))
  578.  
  579. ;;3
  580. (defun list-as-binary-tree (list)
  581.   (cond ((or (null list) (not (consp list))) nil)
  582.         (t (my-adjoin (car list) (list-as-binary-tree (cdr list))))))
  583.  
  584. ;;4
  585. (defun balancedp (tree)
  586.   (cond ((not (consp tree)) nil)
  587.         ((null tree) 0)
  588.         (t (<= (abs (- (tree-height (left-child tree)) (tree-height (right-child tree)))) 1))))
  589.  
  590. ;;5
  591. (defun bt-swap (tree)
  592.   (cond ((or (null tree) (not (consp tree))) nil)
  593.         (t (binary-tree-node (node-value tree) (bt-swap (right-child tree)) (bt-swap (left-child tree))))))
  594.  
  595. ;;6
  596. (defun get-node-by-value (n tree)
  597.   (cond ((or (null tree) (not (consp tree))) nil)
  598.         ((eql (node-value tree) n) tree)
  599.         (t (let ((left (get-node-by-value n (left-child tree))))
  600.           (if (not left) (get-node-by-value n (right-child tree)) left)))))
  601.  
  602. ;;7
  603. (defun tree-sum (tree)
  604.   (cond ((or (null tree) (not (consp tree))) 0)
  605.         ((numberp (car tree)) (+ (car tree) (tree-sum (cdr tree))))
  606.         ((consp (car tree)) (+ (tree-sum (car tree)) (tree-sum (cdr tree))))
  607.         (t (tree-sum (cdr tree)))))
  608.  
  609. ;;8 Ano
  610.        
  611. ;;9    
  612.  
  613. (defun node-children (node)
  614.   (cdr node))
  615.  
  616. (defun tree-node (val children)
  617.   (cons val children))
  618. (defun node-value (node)
  619.   (car node))
  620.  
  621. (defun tree-maximal-paths (tree)
  622.   (cond ((or (null tree) (not (consp tree))) tree)
  623.         (t (add-to-all (car tree) (cdr tree) ()))))
  624.  
  625. (defun add-to-all (e list results)
  626.   (cond ((or (null list) (not (consp list))) results)
  627.         (t (add-to-all e (cdr list) (cons e (car (tree-maximal-paths list)))))))
  628.  
  629.  
  630. ;;10
  631. (defun tree-height (tree)  
  632.   (cond ((or (null tree) (not (consp tree))) 0)
  633.         (t (+ 1 (max (tree-height (left-child tree)) (tree-height (right-child tree)))))))
  634.  
  635.  
  636. ;;11
  637. ;;'(4 // 1 5 9 // / 2 3 1 / 2 11 // / / 3 6)
  638.  
  639.  
  640. (defun deserialize-tree (list)
  641.   (cond ((or (null list) (not (consp list))) nil)
  642.         (t ())
  643.         ))
  644.  
  645. (defun deserialize-branch (list pos)
  646.   (cond ((or (null list) (not (consp list))) nil)
  647.         (t (tree-node (car list) (deserialize-children (get-nth-branch (get-next-layer list) pos) ()))
  648.         )))
  649.  
  650. (defun deserialize-children (list kinder)
  651.   (cond ((not (has-next-child list)) kinder)
  652.         (t (deserialize-children (cdr list) (cons (deserialize-branch (car list) ) kinder)))))
  653.  
  654. (defun has-next-child (list)
  655.  (cond ((or (null list) (not (consp list))) nil)
  656.         ((eql (car list) '//) (cdr list))
  657.         ((eql (car list) '/) (cdr list))
  658.         (t t))
  659.  
  660. (defun get-nth-branch (list n)
  661.   (cond ((or (null list) (not (consp list))) nil)
  662.         ((= n 0) (car list))
  663.         (t (get-nth-branch (cdr list) (- n 1)))))
  664.  
  665.  
  666.  
  667. (defun get-next-layer (list)
  668.   (cond ((or (null list) (not (consp list))) nil)
  669.         ((eql (car list) '//) (cdr list))
  670.         (t (get-next-layer (cdr list)))))
  671.  
  672. (defun get-next-branch (list)
  673.   (cond ((or (null list) (not (consp list))) nil)
  674.         ((eql (car list) '//) nil) ;;We reeached the end of the current layer
  675.         ((eql (car list) '/) (cdr list))
  676.         (t (get-next-branch (cdr list)))))
  677.  
  678. (defun get-next-child (list)
  679.   (cond ((or (null list) (not (consp list))) nil)
  680.         ((eql (car list) '//) nil) ;;We reeached the end of the current layer
  681.         ((eql (car list) '/) nil)
  682.         (t (car list)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement