Skip to content

Commit 07e86a0

Browse files
author
Willsem
committed
📝 remake lab to mapcar
1 parent abc625f commit 07e86a0

File tree

5 files changed

+111
-53
lines changed

5 files changed

+111
-53
lines changed

lab_06/report/01-title.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
\textbf{По курсу <<Функциональное и логическое
4343
програмирование>>.} \\
4444
\vspace{0.5cm}
45-
\textbf{Рекурсивные функции}
45+
\textbf{Работа с функционалами}
4646
\end{center}
4747

4848
\vspace{3cm}

lab_06/report/11-report.tex

Lines changed: 42 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -19,101 +19,91 @@ \section{СПОСОБ 1: СПИСКИ}
1919
Создание списка, состоящего из двухэлементных списков.
2020

2121
\begin{lstlisting}
22-
(defun list_merge_cc (countries cities)
23-
(cond
24-
((null countries) Nil)
25-
((null cities) Nil)
26-
(T (cons
27-
(list (car countries) (car cities))
28-
(list_merge_cc (cdr countries) (cdr cities))
29-
))
30-
)
22+
(defun list_merge (countries cities)
23+
(mapcar #'(lambda (ctr cty) (list ctr cty)) countries cities)
3124
)
3225

33-
(setq list_merged_cc (list_merge_cc countries cities))
26+
(setq list_cc (list_merge countries cities))
3427
\end{lstlisting}
3528

3629
Поиск страны по столице в списке из двухэлементных списков.
3730

3831
\begin{lstlisting}
39-
(defun list_find_country (list_cc city)
40-
(cond
41-
((null list_cc) Nil)
42-
((equal (cadar list_cc) city) (caar list_cc))
43-
(T (list_find_country (cdr list_cc) city))
32+
(defun list_country (list_cc city)
33+
(reduce #'(lambda (a b) (or a b))
34+
(mapcar #'(lambda (el)
35+
(and (equal (cadr el) city) (car el))
36+
) list_cc
37+
)
4438
)
4539
)
4640

47-
(list_find_country list_merged_cc 'Moscow) ;;; Russia
48-
(list_find_country list_merged_cc 'Minsk) ;;; Belarus
49-
(list_find_country list_merged_cc 'Sidney) ;;; Nil
41+
(list_country list_cc 'London) ;;; GB
42+
(list_country list_cc 'NotExist) ;;; Nil
43+
(list_country list_cc 'Moscow) ;;; Russia
5044
\end{lstlisting}
5145

5246
Поиск столицы по стране в списке из двухэлементных списков.
5347

5448
\begin{lstlisting}
55-
(defun list_find_city (list_cc country)
56-
(cond
57-
((null list_cc) Nil)
58-
((equal (caar list_cc) country) (cadar list_cc))
59-
(T (list_find_city (cdr list_cc) country))
49+
(defun list_city (list_cc country)
50+
(reduce #'(lambda (a b) (or a b))
51+
(mapcar #'(lambda (el)
52+
(and (equal (car el) country) (cadr el))
53+
) list_cc
54+
)
6055
)
6156
)
6257

63-
(list_find_city list_merged_cc 'Russia) ;;; Moscow
64-
(list_find_city list_merged_cc 'Belarus) ;;; Minsk
65-
(list_find_city list_merged_cc 'Australia) ;;; Nil
58+
(list_city list_cc 'GB) ;;; London
59+
(list_city list_cc 'NotExist) ;;; Nil
60+
(list_city list_cc 'Russia) ;;; Moscow
6661
\end{lstlisting}
6762

6863
\section{СПОСОБ 2: ТОЧЕЧНЫЕ ПАРЫ}
6964

7065
Создание списка, состоящего из точечных пар.
7166

7267
\begin{lstlisting}
73-
(defun cons_merge_cc (countries cities)
74-
(cond
75-
((null countries) Nil)
76-
((null cities) Nil)
77-
(T (cons
78-
(cons (car countries) (car cities))
79-
(cons_merge_cc (cdr countries) (cdr cities))
80-
))
81-
)
68+
(defun cons_merge (countries cities)
69+
(mapcar #'(lambda (ctr cty) (cons ctr cty)) countries cities)
8270
)
8371

84-
(setq cons_merged_cc (cons_merge_cc countries cities))
72+
(setq cons_cc (cons_merge countries cities))
8573
\end{lstlisting}
8674

8775
Поиск страны по столице в списке из двухэлементных списков.
8876

8977
\begin{lstlisting}
90-
(defun cons_find_country (list_cc city)
91-
(cond
92-
((null list_cc) Nil)
93-
((equal (cdar list_cc) city) (caar list_cc))
94-
(T (cons_find_country (cdr list_cc) city))
78+
(defun cons_country (cons_cc city)
79+
(reduce #'(lambda (a b) (or a b))
80+
(mapcar #'(lambda (el)
81+
(and (equal (cdr el) city) (car el))
82+
) cons_cc
83+
)
9584
)
9685
)
9786

98-
(cons_find_country cons_merged_cc 'Moscow) ;;; Russia
99-
(cons_find_country cons_merged_cc 'Minsk) ;;; Belarus
100-
(cons_find_country cons_merged_cc 'Sidney) ;;; Nil
87+
(cons_country cons_cc 'London) ;;; GB
88+
(cons_country cons_cc 'NotExist) ;;; Nil
89+
(cons_country cons_cc 'Moscow) ;;; Russia
10190
\end{lstlisting}
10291

10392
Поиск столицы по стране в списке из двухэлементных списков.
10493

10594
\begin{lstlisting}
106-
(defun cons_find_city (list_cc country)
107-
(cond
108-
((null list_cc) Nil)
109-
((equal (caar list_cc) country) (cdar list_cc))
110-
(T (cons_find_city (cdr list_cc) country))
95+
(defun cons_city (cons_cc country)
96+
(reduce #'(lambda (a b) (or a b))
97+
(mapcar #'(lambda (el)
98+
(and (equal (car el) country) (cdr el))
99+
) cons_cc
100+
)
111101
)
112102
)
113103

114-
(cons_find_city cons_merged_cc 'Russia) ;;; Moscow
115-
(cons_find_city cons_merged_cc 'Belarus) ;;; Minsk
116-
(cons_find_city cons_merged_cc 'Australia) ;;; Nil
104+
(cons_city cons_cc 'GB) ;;; London
105+
(cons_city cons_cc 'NotExist) ;;; Nil
106+
(cons_city cons_cc 'Russia) ;;; Moscow
117107
\end{lstlisting}
118108

119109
\section{ВЫВОДЫ}

lab_06/report/main.pdf

-313 Bytes
Binary file not shown.

lab_06/src/cons_coutries.lisp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
(setq countries '(Russia USA GB Belarus))
2+
(setq cities '(Moscow Washington London Minsk))
3+
4+
(defun cons_merge (countries cities)
5+
(mapcar #'(lambda (ctr cty) (cons ctr cty)) countries cities)
6+
)
7+
8+
(setq cons_cc (cons_merge countries cities))
9+
10+
(defun cons_city (cons_cc country)
11+
(reduce #'(lambda (a b) (or a b))
12+
(mapcar #'(lambda (el)
13+
(and (equal (car el) country) (cdr el))
14+
) cons_cc
15+
)
16+
)
17+
)
18+
19+
(cons_city cons_cc 'GB) ;;; London
20+
(cons_city cons_cc 'NotExist) ;;; Nil
21+
(cons_city cons_cc 'Russia) ;;; Moscow
22+
23+
(defun cons_country (cons_cc city)
24+
(reduce #'(lambda (a b) (or a b))
25+
(mapcar #'(lambda (el)
26+
(and (equal (cdr el) city) (car el))
27+
) cons_cc
28+
)
29+
)
30+
)
31+
32+
(cons_country cons_cc 'London) ;;; GB
33+
(cons_country cons_cc 'NotExist) ;;; Nil
34+
(cons_country cons_cc 'Moscow) ;;; Russia

lab_06/src/list_countries.lisp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
(setq countries '(Russia USA GB Belarus))
2+
(setq cities '(Moscow Washington London Minsk))
3+
4+
(defun list_merge (countries cities)
5+
(mapcar #'(lambda (ctr cty) (list ctr cty)) countries cities)
6+
)
7+
8+
(setq list_cc (list_merge countries cities))
9+
10+
(defun list_city (list_cc country)
11+
(reduce #'(lambda (a b) (or a b))
12+
(mapcar #'(lambda (el)
13+
(and (equal (car el) country) (cadr el))
14+
) list_cc
15+
)
16+
)
17+
)
18+
19+
(list_city list_cc 'GB) ;;; London
20+
(list_city list_cc 'NotExist) ;;; Nil
21+
(list_city list_cc 'Russia) ;;; Moscow
22+
23+
(defun list_country (list_cc city)
24+
(reduce #'(lambda (a b) (or a b))
25+
(mapcar #'(lambda (el)
26+
(and (equal (cadr el) city) (car el))
27+
) list_cc
28+
)
29+
)
30+
)
31+
32+
(list_country list_cc 'London) ;;; GB
33+
(list_country list_cc 'NotExist) ;;; Nil
34+
(list_country list_cc 'Moscow) ;;; Russia

0 commit comments

Comments
 (0)