Advertisement
Nuparu00

pepe le pepe baguette

Nov 6th, 2021
2,801
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 13.84 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)))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement