Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Functional Programming / 06-Practice-10.11.2022.rkt
blob: 6b35e192ba1efe2b88d509c7b11d889f0d1e372f (plain) (blame)
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
#lang racket

;;; Задача 1

(define (ordered? xs pred)
  (cond [(< (length xs) 2) #t]
        [(not (pred (car xs) (car (cdr xs)))) #f]
        [else (ordered? (cdr xs) pred)]))

(ordered? '(1 2 3 4 5) <) ; -> #t
(ordered? '(1 2 3 6 5) <) ; -> #f

;;; Задача 2

(define (max-ordered-sublist xs)
  (define (calc xs biggest-sl current-sl)
    (cond [(null? xs) (reverse biggest-sl)]
          [(> (length current-sl) (length biggest-sl)) (calc xs current-sl current-sl)]
          [(< (car xs) (car current-sl)) (calc (cdr xs) biggest-sl (list* (car xs) current-sl))]
          [else (calc (cdr xs) biggest-sl (list (car xs)))]))
  (calc (cdr xs) (list (car xs)) (list (car xs))))

(max-ordered-sublist '(1 2 3 4 5 1 0)) ; -> '(5 1)

;;; Задача 3

(define (flatten xs)
  (cond [(not (list? xs)) (list xs)]
        [(null? (cdr xs)) (flatten (car xs))]
        [else (append (flatten (car xs)) (flatten (cdr xs)))]))

(flatten '((1 2 3) (4 5 6) ((7 8) (9 10 (11 (12)))))) ; -> '(1 2 3 4 5 6 7 8 9 10 11 12)

;;; Задача 4

(define (assoc key a-list)
  (cond [(null? a-list) '()]
        [(equal? key (caar a-list)) (cdar a-list)]
        [else (assoc key (cdr a-list))]))

(assoc 'b '((a 10) (c 6) (b 11) (b 45) (djf 9)))

;;; Задача 5

(define (replace lst dict)
  (cond [(null? lst) lst]
        [else (append (assoc (car lst) dict) (replace (cdr lst) dict))]))

(replace '(1 2 3 4) '((1 a) (2 b) (3 c) (4 d))) ; -> '(a b c d)

;;; Задача 6

(define (deep-delete lst)
  (define (calc lst depth)
    (cond [(null? lst) lst]
          [(list? (car lst)) (list (calc (car lst) (add1 depth)) (calc (cdr lst) depth))]
          [(< (car lst) depth) (calc (cdr lst) depth)]
          [else (list* (car lst) (calc (cdr lst) depth))]))
  (calc lst 1))

(deep-delete '(1 (2 (2 4) 1) 0 (3 (1)))) ; -> (1 (2 (4)) (3 ())))

;;; Задача 7

(define (diagonal mat)
  (define (calc mat ind result)
    (cond [(null? mat) result]
          [else (calc (cdr mat) (add1 ind) (append result (list (list-ref (car mat) ind))))]))
  (calc mat 0 '()))

(define matrix '((1 2 3 4)
                 (5 6 7 8)
                 (9 10 11 12)
                 (13 14 15 16)))
(diagonal matrix) ; -> (1 6 11 16)

;;; Задача 8

(define (tabulate f)
  (lambda (a b)
    (define (calc a result)
      (if (> a b)
        result
        (calc (add1 a) (append result (list (cons a (f a)))))))
    (calc a '())))

((tabulate sqr) 1 5) ; -> '((1 . 1) (2 . 4) (3 . 9) (4 . 16) (5 . 25))