Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Functional Programming
diff options
context:
space:
mode:
Commit3e62b4987d83343eb3f4c6ad3858214218ff8583 (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-11-10 11:48:28 +0200
Committer
 Syndamia <kamen@syndamia.com>
2022-11-10 11:48:28 +0200
Files3d0cd3803684d4519f9dfa683002acf8868edc71 /Year 2/Functional Programming
uni-projects-3e62b4987d83343eb3f4c6ad3858214218ff8583.tar
uni-projects-3e62b4987d83343eb3f4c6ad3858214218ff8583.tar.gz
uni-projects-3e62b4987d83343eb3f4c6ad3858214218ff8583.zip
Parent7c8f2a8aa04603d5bc83441353184589640e8c41 (diff)
[FP/P06] Added work from practicum
1 files changed, 76 insertions, 0 deletions
-rw-r--r--Year 2/Functional Programming/06-Practice-10.11.2022.rkt76
diff --git a/Year 2/Functional Programming/06-Practice-10.11.2022.rkt b/Year 2/Functional Programming/06-Practice-10.11.2022.rkt
new file mode 100644
index 0000000..07f89b3
--- /dev/null
+++ b/Year 2/Functional Programming/06-Practice-10.11.2022.rkt
@@ -0,0 +1,76 @@
+#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)]))
+
+;;; Задача 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))))
+
+;;; Задача 3
+
+(define (flatten xs)
+ (cond [(not (list? xs)) (list xs)]
+ [(null? (cdr xs)) (flatten (car xs))]
+ [else (append (flatten (car xs)) (flatten (cdr xs)))]))
+
+;;; Задача 4
+
+(define (assoc key a-list)
+ (cond [(null? a-list) '()]
+ [(equal? key (caar a-list)) (cdar a-list)]
+ [else (assoc key (cdr a-list))]))
+
+;;; Задача 5
+
+(define (replace lst dict)
+ (cond [(null? lst) lst]
+ [else (append (assoc (car lst) dict) (replace (cdr lst) dict))]))
+
+;;; Задача 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))