Advertisement
osipyonok

mulisp

Apr 12th, 2018
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.86 KB | None | 0 0
  1. ;(1 2 (3 (4 5) 6)) -> (1 2 3 4 5 6)
  2. (defun flatten (lst)
  3.     (mapcan
  4.         '(lambda (a)
  5.             (cond
  6.                 ((atom a) (list a))
  7.                 (t (flatten a))
  8.             )
  9.         ) lst
  10.     )
  11. )
  12.  
  13.  
  14. ;(1 2 (3 4) 5) -> (1 1 2 2 (3 4) (3 4) 5 5)
  15. (defun dblels (lst)
  16.     (mapcan '(lambda (x) (list x x)) lst)
  17. )
  18.  
  19.  
  20. ;(1 2 3 4 5 6 8) -> ((2 4 6 8) (1 3 5))
  21. (defun f1 (lst)
  22.     (list
  23.         (mapcan '(lambda (n) ((evenp n) (list n))) lst)
  24.         (mapcan '(lambda (n) ((oddp n) (list n))) lst)
  25.     )
  26. )
  27.  
  28.  
  29. ;(1 2 3 4) -> ((4 3 2 1) (4 3 2) (4 3) (4))
  30. (defun rev (lst)
  31.     (maplist 'reverse lst)
  32. )
  33.  
  34.  
  35. ;(1 2 (3 4) 5) -> (5 (4 3) 2 1)
  36. (defun deep_reverse (lst)
  37.     (cond
  38.         ((atom lst) lst)
  39.         (t (reverse (mapcar 'deep_reverse lst)))
  40.     )
  41. )
  42.  
  43.  
  44. ;lst = (1 2 3 (1 3 (2 3) 2) 1) val = 2 whatever = 4 -> (1 4 3 (1 3 (4 3) 4 ) 1)
  45. (defun replace_all_vals (lst val whatever)
  46.     (mapcan
  47.         '(lambda (a)
  48.             (cond
  49.                 ((atom a) (cond
  50.                     ((eq a val) (list whatever))
  51.                     (t (list a))
  52.                 ))
  53.                 (t (list (replace_all_vals a val whatever)))
  54.             )
  55.         ) lst
  56.     )
  57. )
  58.  
  59.  
  60. ;lst = (1 2 (2 2 1 (2)) 2) val = 2 whatever = 0 -> (1 2 0 (2 0 2 0 1 (2 0)) 2 0)
  61. (defun insert_after_vals (lst val whatever)
  62.     (mapcan
  63.         '(lambda (a)
  64.             (cond
  65.                 ((atom a)
  66.                     (cond
  67.                         ((eq a val) (list a whatever))
  68.                         (t (list a))
  69.                     )
  70.                 )
  71.                 (t (list (insert_after_vals a val whatever)))
  72.             )
  73.         ) lst
  74.     )
  75. )
  76.  
  77.  
  78. ; (1 2 3 (1 2)) -> (1 2 2 3 (1 2 2))
  79. (defun f2 (lst)
  80.     (mapcan '(lambda (x)
  81.                 (cond  
  82.                     ((atom x)
  83.                         (cond
  84.                             ((evenp x) (list x x)) 
  85.                             ((oddp x) (list x))))
  86.                     (t (list(f2 x)))
  87.                 )
  88.             )              
  89.         lst
  90.     )  
  91. )
  92.  
  93.  
  94. ; (1 2 3 2 4)  2 -> (1 3 4)
  95. (defun remove_vals (lst val)
  96.     (mapcan '(lambda (n) ((not (eq n val)) (list n))) lst)
  97. )
  98.  
  99.  
  100. ; (1 2 3) (4 5 6) -> (1 4 2 5 3 6)
  101. (defun mergee (lst1 lst2)
  102.     (mapcan
  103.         '(lambda (u v) (list u v)) lst1 lst2
  104.     )
  105. )
  106.  
  107.  
  108. ;(1 2 3 4) -> (1 (2 (3 (4))))
  109. (defun bracketize (lst)
  110.     (cond
  111.         ((eq (length lst) 1) lst)
  112.         ((> (length lst) 1)
  113.             (append
  114.                 (list (car lst))
  115.                 (list (f (cdr lst)))
  116.             )
  117.         )
  118.     )
  119. )
  120.  
  121.  
  122. ;(1 2 3 4) ->  (((((4) 3) 2) 1)
  123. (defun reversed_bracketize (lst)
  124.     (bracketize (reverse lst))
  125. )
  126.  
  127.  
  128. ;(1 2 3 4) ->  (((((1) 2) 3) 4)
  129. (defun reversed_bracketize2 (lst)
  130.     (deep_reverse (bracketize (reverse lst)))
  131. )
  132.  
  133.  
  134. ; (Horner '(1 2 3) 5) = 1*5^2 + 2*5^1 + 3*5^0 = 38
  135. ; многочлен в точке
  136. (defun Horner (lst x)
  137.     (cond
  138.         ((null (cdr lst)) (car lst))
  139.         (t
  140.             (Horner
  141.                 (cons
  142.                     (+ (* (car lst) x) (cadr lst))
  143.                     (cddr lst)
  144.                 )
  145.                 x
  146.             )
  147.         )
  148.     )
  149. )
  150.  
  151.  
  152. ; наибольший общий делитель
  153. (defun gcd (a b)
  154.     (cond
  155.         ((eq a 0) b)
  156.         ((eq b 0) a)
  157.         (t (gcd (mod b a) a))
  158.     )
  159. )
  160.  
  161.  
  162. ; наименьшее общее кратное
  163. (defun lcm (a b)
  164.     (/ (* a b) (gcd a b))
  165. )
  166.  
  167.  
  168. ; t - в списке есть и парные и непарные, nil иначе
  169. (defun isOddEven (lst)
  170.     (cond
  171.         (
  172.             (and
  173.                 (mapcan '(lambda (n) ((evenp n) (list n))) lst)
  174.                 (mapcan '(lambda (n) ((oddp n) (list n))) lst)
  175.             )
  176.             t
  177.         )
  178.         (t nil)
  179.     )
  180. )
  181.  
  182. ; t - в списке есть и положительные и отрицательные числа, nil иначе
  183. (defun isDiffSigns (lst)
  184.     (cond
  185.         (
  186.             (and
  187.                 (mapcan '(lambda (n) ((>= n 0) (list n))) lst)
  188.                 (mapcan '(lambda (n) ((< n 0) (list n))) lst)
  189.             )
  190.             t
  191.         )
  192.         (t nil)
  193.     )
  194. )
  195.  
  196.  
  197. ; (removeEven '(1 2 3 4 5))
  198. (defun removeEven (lst)
  199.     (mapcan '(lambda (n) ((oddp n) (list n))) lst)
  200. )
  201.  
  202.  
  203. ; (transpose '((1 2 3) (4 5 6) (7 8 9)))
  204. (defun transpose (matrix)
  205.     (defun cars (matrix)
  206.         (if (null matrix)
  207.             nil
  208.             (cons (car (car matrix)) (cars (cdr matrix)))
  209.         )
  210.     )
  211.  
  212.     (defun cdrs (matrix)
  213.         (if (null matrix)
  214.             nil
  215.             (cons (cdr (car matrix)) (cdrs (cdr matrix)))
  216.         )
  217.     )
  218.    
  219.     (cond
  220.         ((null matrix) nil)
  221.         ((null (car matrix)) nil)
  222.         (t (cons (cars matrix) (transpose (cdrs matrix))))
  223.     )
  224. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement