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))
|