Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.67 KB | None | 0 0
  1. (defun contain (wyr zm)
  2.     (let ((answ 0))
  3.     (loop for x in wyr do
  4.         (if (listp x)
  5.             (setq answ (+ answ (contain x zm))))
  6.         (if (eql x zm)
  7.             (setq answ (+ answ 1)))
  8.     )
  9.     answ
  10.     )
  11. )
  12.  
  13. (defun pack (wyr)
  14.     (if (listp wyr)
  15.         wyr
  16.         (list wyr))
  17. )
  18.  
  19. (defun simplify (wyr)
  20.     (if (listp (second wyr))
  21.         (setf (nth 1 wyr) (simplify (second wyr)))
  22.     )
  23.     (if (and (not (null (third wyr))) (listp (third wyr)))
  24.         (setf (nth 2 wyr) (simplify (third wyr)))
  25.     )
  26.     ;; (write (second wyr))
  27.     ;; (write-line "")
  28.     ;; (write (third wyr))
  29.     ;; (write-line "")
  30.     (if (and (numberp (second wyr)) (numberp (third wyr)))
  31.         (funcall (first wyr) (second wyr) (third wyr))
  32.         wyr
  33.     )    
  34. )
  35.  
  36. (defun integrate_private (wyr)
  37.     (let ((operator (first wyr)) (expresion (second wyr)) (var (third wyr)))
  38.         ;; (write expresion)
  39.         ;; (write-line "")
  40.         ;; (write (type-of var))
  41.         ;; (write-line "")
  42.         (if (string= operator 'INTEGRAL)
  43.             (let ((char_type (first expresion)) (f_elem (second expresion)) (s_elem (third expresion)))
  44.                 ;; (write (type-of +))
  45.                 ;; (write-line "")
  46.                 (if (numberp char_type)
  47.                     (list '* char_type var)
  48.                 (if (eql var char_type)
  49.                     (list '/ (list 'expt var 2) 2)
  50.                     (case char_type
  51.                         (+ (list '+ (integrate (list 'integral (pack f_elem) var))
  52.                             (integrate (list 'integral (pack s_elem) var))))
  53.                         (- (list '- (integrate (list 'integral (pack f_elem) var))
  54.                             (integrate (list 'integral (pack s_elem) var))))
  55.                         (*  (if (eql (contain (list f_elem) var) 0)
  56.                                 (list '* f_elem (integrate (list 'integral (pack s_elem) var)))
  57.                             (if (eql (contain (list s_elem) var) 0)
  58.                                 (list '* s_elem (integrate (list 'integral (pack f_elem) var)))
  59.                                 (list 'INTEGRAL expresion))))
  60.                         (/  (if (and (eql (contain (list f_elem) var) 0) (eql var s_elem))
  61.                                 (list '* f_elem  (list 'log var))
  62.                             (if (eql (contain (list s_elem) var) 0)
  63.                                 (list '/ (integrate (list 'integral (pack f_elem) var)) s_elem)
  64.                                 (list 'INTEGRAL expresion))))
  65.                         (expt  (if (and (eql (contain (list f_elem) var) 0) (eql s_elem var))
  66.                                 (list '/ (list 'expt f_elem s_elem) (list 'log f_elem))
  67.                             (if (and (eql (contain (list s_elem) var) 0) (eql f_elem var))
  68.                                 (list '/ (list 'expt f_elem (list '+ s_elem 1)) (list '+ s_elem 1))
  69.                                 (list 'INTEGRAL expresion))))
  70.                         (otherwise "nieznane")
  71.                     )
  72.                 ))
  73.             )
  74.             ;; expresion
  75.         )
  76.     )
  77. )
  78.  
  79. (defun integrate (wyr)
  80.     (simplify (integrate_private wyr))
  81. )
  82.  
  83.  
  84.  
  85.  
  86. (write (integrate '(integral (* 2 x) x)))
  87. (write-line "")
  88. (write (integrate '(integral (+ 2 x) x)))
  89. (write-line "")
  90. (write (integrate '(integral (/ 2 x) x)))
  91. (write-line "")
  92. (write (integrate '(integral (/ x 2) x)))
  93. (write-line "")
  94. (write (integrate '(integral (expt 2 x) x)))
  95. (write-line "")
  96. (write (integrate '(integral (* 5 (expt x 16)) x)))
  97. (write-line "")
  98. (write (integrate '(integral (- 2 x) x)))
  99. (write-line "")
  100. (write (integrate '(integral (+ (* (- 5 (expt y 12)) x) 2) x)))
  101. (write-line "")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement