-
Notifications
You must be signed in to change notification settings - Fork 0
/
READY-1.lsp
107 lines (72 loc) · 2.8 KB
/
READY-1.lsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
(print "----------НОВЫЕ----------")
(terpri)
#||
14) Определите функцию, осуществляющую перестановку двух элементов списка с заданными номерами.
||#
(print "Лабораторная 14")
(defun swapTwoElements(list pos1 pos2)
(cond ((> pos1 0)
(cons (car list) (swapTwoElements(cdr list) (1- pos1) (1- pos2))))
((> pos2 1)
((lambda (result) (cons (car result) (cons (cadr list) (cdr result))))
(swapTwoElements(cons (car list) (cddr list)) (1- pos1) (1- pos2))))
(T (cons (cadr list) (cons (car list) (cddr list))))))
(print(swapTwoElements '(1 2 3 4 5) 0 1))
;; (2 1 3 4 5)
(print(swapTwoElements '(1 2 3 4 0 8) 1 5))
;; (1 8 3 4 0 2)
(print(swapTwoElements '(1 2 3 4 0 8 9 2 22) 3 7))
;; (11 -5 2 3 4 5 1)
(print "__________________________________________________________________________")
(terpri)
#||
21) Определите функцию, удаляющую из списка первое вхождение данного элемента на верхнем уровне.
||#
(print "Лабораторная 21")
(defun removeFirst (num list)
((lambda (elemement) (and (setq first (car elemement)) (setq last (cdr elemement)))) list)
(cond ((null first) list)
((eq first num) last)
(t (cons first (removeFirst (cdr list) elemement)))))
(print (removeFirst 3 '(3 2 3 4 3 10)))
;; (2 3 4 3 10)
(print (removeFirst 1 '(1 1 1)))
;; (1 1)
(print (removeFirst 1 '(1)))
;; NIL
(print "__________________________________________________________________________")
(terpri)
#||
28) Определите функцию, вычисляющую, сколько всего атомов в списке (списоч-
ной структуре).
||#
(defun atomCount(list)
(length (mapcar (lambda (a)
(cond (t (atom a) (list t) nil))) list))
)
(print (atomCount '(1 2 (3 333) 331 1)))
;; 6
(print (atomCount '(1)))
;; 1
(print (atomCount '()))
;; 0
(print "__________________________________________________________________________")
(terpri)
(print "----------ИСПРАВЛЕНИЯ----------")
(terpri)
#||
3) Определите функцию, заменяющую в
исходном списке все вхождения заданного значения другим.
||#
(print "Лабораторная 3")
(defun change (val valToChange list)
(mapcar (lambda (arg)
(cond ((eq valToChange arg) val)
(t arg))) list))
(print(change 1 2 '(1 2 22 33 1 22 4)))
;; (1 1 22 33 1 22 4)
(print(change 4 1 '(1 1 1 33 1 1 8)))
;; (4 4 4 33 4 4 8)
(print(change 0 10 '(10 10 100 33 1 1 8)))
;; (0 0 100 33 1 1 8)
(print "__________________________________________________________________________")