fork download
  1. ;----------- 3 задание
  2.  
  3. (defun replace ; заменяет все значения old_value на new_value в списке array
  4. (array old_value new_value)
  5. (cond
  6. ((null array) nil)
  7. ((eql old_value (car array)) (cons new_value (replace (cdr array) old_value new_value)))
  8. (t (cons (car array) (replace (cdr array) old_value new_value)))
  9. )
  10. )
  11.  
  12. (print (replace '(1 2 7 1 0 1 4) 1 6))
  13.  
  14. ;-------
  15.  
  16. ;------ 9 задание
  17. (defun neql (a b) ; функция обратна функции eql
  18. (not (eql a b))
  19. )
  20.  
  21. (defun even (array) ; возвращает подсписок списка array, в котором все элементы-цифры четные
  22. (cond
  23. ((null array) nil)
  24. ((eql 0 (mod (car array) 2)) (cons (car array) (even (cdr array))))
  25. (t (even (cdr array)))
  26. )
  27. )
  28.  
  29. (defun odd (array) ; возвращает подсписок списка array, в котором все элементы-цифры нечетные
  30. (cond
  31. ((null array) nil)
  32. ((neql 0 (mod (car array) 2)) (cons (car array) (odd (cdr array))))
  33. (t (odd (cdr array)))
  34. )
  35. )
  36.  
  37. (defun even_odd (array) (list (odd array) (even array))) ; разделяет список из цифр array на нечетный и четный списки
  38.  
  39. (print (even_odd '(1 2 3 4 5 6 7 8 9 10)))
  40.  
  41. ;------
  42.  
  43. ;------ 10 задание
  44. (defun pop (array) ; удаляет последний элемент из списка array
  45. (cond
  46. ((null (cdr array)) nil)
  47. (t (cons (car array) (pop (cdr array))))
  48. )
  49. )
  50.  
  51. (defun del (array count) ; удаляет count последних элементов из списка array
  52. (cond
  53. ((eql count 1) (pop array))
  54. (t (del (pop array) (- count 1)))
  55. )
  56. )
  57.  
  58. (print (del '(1 2 3 4 5 6 7 8 9 10) 3))
  59.  
  60. ;-----
  61.  
  62. (defun in (elem array) ; проверяет находится ли elem в списке array
  63. (cond
  64. ((null array) nil)
  65. ((eql elem (car array)) t)
  66. (t (in elem (cdr array)))
  67. )
  68. )
  69.  
  70. (defun set (array) ; возвращает множество (только уникальные элементы) из списка array
  71. (cond
  72. ((null array) nil)
  73. ((in (car array) (cdr array)) (set (cdr array)))
  74. (t (cons (car array) (set (cdr array))))
  75. )
  76. )
  77.  
  78. ;----- 17 задание
  79. (defun remove (elem array) ; удаляет первое вхождение elem из списка array
  80. (cond
  81. ((null array) nil)
  82. ((eql elem (car array)) (cdr array))
  83. (t (cons (car array) (remove elem (cdr array))))
  84. )
  85. )
  86.  
  87. (defun adds (elem sets) ; добавляет в каждый список из sets в начало elem
  88. (cond
  89. ((null sets) nil)
  90. (t (cons (cons elem (car sets)) (adds elem (cdr sets))))
  91. )
  92. )
  93.  
  94. (defun pair (elem array) ; формирует пару значений (значение elem из списка array; список array без этого значения)
  95. (list elem (remove elem array))
  96. )
  97.  
  98. (defun pairs (array elems) ; формирует список пар значений (значение из списка elems; список array без этого значения)
  99.  
  100. (cond
  101. ((null elems) nil)
  102. (t (cons (pair (car elems) array) (pairs array (cdr elems))))
  103. )
  104. )
  105.  
  106. (defun info-pair (pair1) ; создает комбинацию или комбинации значений пары
  107. (cond
  108. ((null (cdadr pair1)) (list (list (car pair1) (caadr pair1))))
  109. (t (adds (car pair1) (all-swap (cadr pair1))))
  110. )
  111. )
  112.  
  113. (defun info-pairs (set_pairs) ; создает комбинации значений пар
  114. (cond
  115. ((null set_pairs) nil)
  116. (t
  117. (append
  118. (info-pair (car set_pairs))
  119. (info-pairs (cdr set_pairs))
  120. )
  121. )
  122. )
  123. )
  124.  
  125. (defun all-swap (set) ; создает все перестановки списка set
  126. (let ((all_pair (pairs set set)))
  127. (info-pairs all_pair)
  128. )
  129. )
  130.  
  131. (print (all-swap (set '(1 2 3 3 1))))
  132.  
  133. ;-----
  134.  
  135. ;------- 18
  136. (defun is-atoms (array) ; проверяет состоит ли список array только из атомов
  137. (cond
  138. ((null array) t)
  139. ((atom (car array)) (is-atoms (cdr array)))
  140. (t nil)
  141. )
  142. )
  143.  
  144. (print (is-atoms '(7 6 3 0 3)))
  145. (print (is-atoms '(7 6 3 (0 3))))
  146.  
  147. ;--------
  148.  
  149. ;-------23
  150. (defun in-list (array) ; формирует вложенный список
  151. (cond
  152. ((null (cdr array)) array)
  153. (t (list (car array) (in-list (cdr array))))
  154. )
  155. )
  156.  
  157. (defun out-list (array) ; раскрывает вложенный список
  158. (cond
  159. ((null (cdr array)) array)
  160. (t (cons (car array) (out-list (cadr array))))
  161. )
  162. )
  163.  
  164. (setf a (in-list '(a b c d)))
  165. (print a)
  166. (print (out-list a))
  167.  
  168. ;-------
  169.  
  170. ;------ 34
  171. (defun РАВЕНСТВО-МНОЖЕСТВ (set1 set2)
  172. (cond
  173. ((and (null set1) (null set2)) t)
  174. ((null set1) nil)
  175. ((null set2) nil)
  176. ((in (car set1) set2) (РАВЕНСТВО-МНОЖЕСТВ (cdr set1) (remove (car set1) set2)))
  177. (t nil)
  178. )
  179. )
  180.  
  181. (print (РАВЕНСТВО-МНОЖЕСТВ '(1 2 3 4) '(4 1 3 2)))
  182. (print (РАВЕНСТВО-МНОЖЕСТВ '(1 2 3 4) '(4 1 3)))
  183.  
  184. ;------
  185.  
  186. ;------ 38
  187. (defun union (set1 set2)
  188. (cond
  189. ((null set1) set2)
  190. ((null set2) set1)
  191. ((in (car set2) set1) (union set1 (cdr set2)))
  192. (t (union (cons (car set2) set1) (cdr set2)))
  193. )
  194. )
  195.  
  196. (print (union (set '(1 2 3 4 1 2)) (set '(3 4 3 5 10))))
  197.  
  198. ;-----
  199.  
  200. ;----- 42
  201. (defun max2 (a b) ; максимум двух чисел
  202. (cond
  203. ((> a b) a)
  204. (t b)
  205. )
  206. )
  207.  
  208. (defun max-of-subtrees (subtrees curr-max) ; обход списка поддеревьев, поддерживая текущий максимум
  209. (cond
  210. ((null subtrees) curr-max)
  211. (t (max-of-subtrees (cdr subtrees)
  212. (max2 curr-max (max-tree (car subtrees)))))
  213. )
  214. )
  215.  
  216. (defun max-tree (tree) ; максимальное значение в дереве
  217. (cond
  218. ((atom tree) tree)
  219. (t (max-of-subtrees (cdr tree) (car tree)))
  220. )
  221. )
  222.  
  223. (max-tree '(5 (3 8 2) (7 (2 4 0) 9)))
  224. (max-tree '(42))
  225. (max-tree '(6 (10 34 20) (40 18 5)))
  226.  
  227. ;-----
  228.  
  229. ;------ 45
  230. (defun РАССТОЯНИЕ (a b)
  231. (let ((dx (- (get a 'x) (get b 'x)))
  232. (dy (- (get a 'y) (get b 'y))))
  233. (sqrt (+ (* dx dx) (* dy dy))))
  234. )
  235.  
  236. (setf (get 'москва 'x) 0)
  237. (setf (get 'москва 'y) 0)
  238. (setf (get 'питер 'x) 3)
  239. (setf (get 'питер 'y) 4)
  240.  
  241. (print (РАССТОЯНИЕ 'москва 'питер))
  242.  
  243. ;-------
  244.  
Success #stdin #stdout #stderr 0.04s 10416KB
stdin
Standard input is empty
stdout
(6 2 7 6 0 6 4) 
((1 3 5 7 9) (2 4 6 8 10)) 
(1 2 3 4 5 6 7) 
((2 3 1) (2 1 3) (3 2 1) (3 1 2) (1 2 3) (1 3 2)) 
T 
NIL 
(A (B (C (D)))) 
(A B C D) 
T 
NIL 
(10 5 3 4 1 2) 
5 
stderr
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later!
Memory dump:
  0x8000000000 - 0x80000bffff
  0x14ab30c00000 - 0x14ab30ee4fff
  0x14ab31015000 - 0x14ab31039fff
  0x14ab3103a000 - 0x14ab311acfff
  0x14ab311ad000 - 0x14ab311f5fff
  0x14ab311f6000 - 0x14ab311f8fff
  0x14ab311f9000 - 0x14ab311fbfff
  0x14ab311fc000 - 0x14ab311fffff
  0x14ab31200000 - 0x14ab31202fff
  0x14ab31203000 - 0x14ab31401fff
  0x14ab31402000 - 0x14ab31402fff
  0x14ab31403000 - 0x14ab31403fff
  0x14ab31480000 - 0x14ab3148ffff
  0x14ab31490000 - 0x14ab314c3fff
  0x14ab314c4000 - 0x14ab315fafff
  0x14ab315fb000 - 0x14ab315fbfff
  0x14ab315fc000 - 0x14ab315fefff
  0x14ab315ff000 - 0x14ab315fffff
  0x14ab31600000 - 0x14ab31603fff
  0x14ab31604000 - 0x14ab31803fff
  0x14ab31804000 - 0x14ab31804fff
  0x14ab31805000 - 0x14ab31805fff
  0x14ab31878000 - 0x14ab3187bfff
  0x14ab3187c000 - 0x14ab3187cfff
  0x14ab3187d000 - 0x14ab3187efff
  0x14ab3187f000 - 0x14ab3187ffff
  0x14ab31880000 - 0x14ab31880fff
  0x14ab31881000 - 0x14ab31881fff
  0x14ab31882000 - 0x14ab3188ffff
  0x14ab31890000 - 0x14ab3189dfff
  0x14ab3189e000 - 0x14ab318aafff
  0x14ab318ab000 - 0x14ab318aefff
  0x14ab318af000 - 0x14ab318affff
  0x14ab318b0000 - 0x14ab318b0fff
  0x14ab318b1000 - 0x14ab318b6fff
  0x14ab318b7000 - 0x14ab318b8fff
  0x14ab318b9000 - 0x14ab318b9fff
  0x14ab318ba000 - 0x14ab318bafff
  0x14ab318bb000 - 0x14ab318bbfff
  0x14ab318bc000 - 0x14ab318e9fff
  0x14ab318ea000 - 0x14ab318f8fff
  0x14ab318f9000 - 0x14ab3199efff
  0x14ab3199f000 - 0x14ab31a35fff
  0x14ab31a36000 - 0x14ab31a36fff
  0x14ab31a37000 - 0x14ab31a37fff
  0x14ab31a38000 - 0x14ab31a4bfff
  0x14ab31a4c000 - 0x14ab31a73fff
  0x14ab31a74000 - 0x14ab31a7dfff
  0x14ab31a7e000 - 0x14ab31a7ffff
  0x14ab31a80000 - 0x14ab31a85fff
  0x14ab31a86000 - 0x14ab31a88fff
  0x14ab31a8b000 - 0x14ab31a8bfff
  0x14ab31a8c000 - 0x14ab31a8cfff
  0x14ab31a8d000 - 0x14ab31a8dfff
  0x14ab31a8e000 - 0x14ab31a8efff
  0x14ab31a8f000 - 0x14ab31a8ffff
  0x14ab31a90000 - 0x14ab31a96fff
  0x14ab31a97000 - 0x14ab31a99fff
  0x14ab31a9a000 - 0x14ab31a9afff
  0x14ab31a9b000 - 0x14ab31abbfff
  0x14ab31abc000 - 0x14ab31ac3fff
  0x14ab31ac4000 - 0x14ab31ac4fff
  0x14ab31ac5000 - 0x14ab31ac5fff
  0x14ab31ac6000 - 0x14ab31ac6fff
  0x55f4d60be000 - 0x55f4d61aefff
  0x55f4d61af000 - 0x55f4d62b8fff
  0x55f4d62b9000 - 0x55f4d6318fff
  0x55f4d631a000 - 0x55f4d6348fff
  0x55f4d6349000 - 0x55f4d6379fff
  0x55f4d637a000 - 0x55f4d637dfff
  0x55f4d65d9000 - 0x55f4d65f9fff
  0x7fff176ca000 - 0x7fff176eafff
  0x7fff1778d000 - 0x7fff17790fff
  0x7fff17791000 - 0x7fff17792fff
WARNING: DEFUN/DEFMACRO(REPLACE): #<PACKAGE COMMON-LISP> is locked
         Ignore the lock and proceed
WARNING: DEFUN/DEFMACRO: redefining function REPLACE in
         /home/NoNNKe/prog.lisp, was defined in C
WARNING: DEFUN/DEFMACRO(POP): #<PACKAGE COMMON-LISP> is locked
         Ignore the lock and proceed
WARNING: DEFUN/DEFMACRO: redefining macro POP in /home/NoNNKe/prog.lisp, was
         defined in
         /build/clisp-kw1q0a/clisp-2.49.20180218+really2.49.92/debian/build/places.fas
WARNING: DEFUN/DEFMACRO(SET): #<PACKAGE COMMON-LISP> is locked
         Ignore the lock and proceed
WARNING: DEFUN/DEFMACRO: redefining function SET in /home/NoNNKe/prog.lisp,
         was defined in C
WARNING: DEFUN/DEFMACRO(REMOVE): #<PACKAGE COMMON-LISP> is locked
         Ignore the lock and proceed
WARNING: DEFUN/DEFMACRO: redefining function REMOVE in /home/NoNNKe/prog.lisp,
         was defined in C
WARNING: DEFUN/DEFMACRO(UNION): #<PACKAGE COMMON-LISP> is locked
         Ignore the lock and proceed
WARNING: DEFUN/DEFMACRO: redefining function UNION in /home/NoNNKe/prog.lisp,
         was defined in
         /build/clisp-kw1q0a/clisp-2.49.20180218+really2.49.92/debian/build/defs1.fas