Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Functional Programming
diff options
context:
space:
mode:
Commit6c27855a224d23e66be717518280b1cb4fab1514 (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-11-03 10:59:11 +0200
Committer
 Syndamia <kamen@syndamia.com>
2022-11-03 10:59:11 +0200
Filesd507a9fd27341abb08e9b6c6b5e016ded81c8a6b /Year 2/Functional Programming
uni-projects-6c27855a224d23e66be717518280b1cb4fab1514.tar
uni-projects-6c27855a224d23e66be717518280b1cb4fab1514.tar.gz
uni-projects-6c27855a224d23e66be717518280b1cb4fab1514.zip
Parent9c02368555926e698baad1eb82e078b581d08c47 (diff)
[FP/P05] Added work from today's practicum
1 files changed, 91 insertions, 0 deletions
-rw-r--r--Year 2/Functional Programming/05-Practice-03.11.2022.rkt91
diff --git a/Year 2/Functional Programming/05-Practice-03.11.2022.rkt b/Year 2/Functional Programming/05-Practice-03.11.2022.rkt
new file mode 100644
index 0000000..8e5fd7e
--- /dev/null
+++ b/Year 2/Functional Programming/05-Practice-03.11.2022.rkt
@@ -0,0 +1,91 @@
+#lang racket
+
+;;; Exercise 01
+
+(define (list-len a)
+ (if (null? a)
+ 0
+ (add1 (list-len (cdr a)))))
+
+;;; Exercise 02
+
+(define (list-contains lst elem)
+ (cond [(null? lst) #f]
+ [(= (car lst) elem) #t]
+ [else (list-contains (cdr lst) elem)]))
+
+;;; Exercise 03
+
+(define (list-insert lst elem ind)
+ (if (= ind 0)
+ (list* elem lst)
+ (list* (car lst) (list-insert (cdr lst) elem (sub1 ind)))))
+
+;;; Exercise 04
+
+(define (list-min lst)
+ (define (calc-iter lst minel)
+ (cond [(null? lst) minel]
+ [(< (car lst) minel) (calc-iter (cdr lst) (car lst))]
+ [else (calc-iter (cdr lst) minel)]))
+ (calc-iter lst (car lst)))
+
+;;; Exercise 05
+
+(define (remove-first lst elem)
+ (if (= (car lst) elem)
+ (cdr lst)
+ (if (null? (cdr lst))
+ lst
+ (list* (car lst) (remove-first (cdr lst) elem)))))
+
+;;; Exercise 06
+
+(define (remove-elem lst elem)
+ (if (null? lst)
+ lst
+ (if (= (car lst) elem)
+ (remove-elem (cdr lst) elem)
+ (list* (car lst) (remove-elem (cdr lst) elem)))))
+
+;;; Exercise 07
+
+(define (list-concat lst1 lst2)
+ (if (null? lst1)
+ lst2
+ (if (null? (cdr lst1))
+ (list* (car lst1) lst2)
+ (list* (car lst1) (list-concat (cdr lst1) lst2)))))
+
+;;; Exercise 08
+
+(define (list-rev lst)
+ (define (calc-iter toret lst)
+ (if (null? lst)
+ toret
+ (calc-iter (list-insert toret (car lst) 0) (cdr lst))))
+ (calc-iter '() lst))
+
+;;; Exercise 09
+
+(define (remove-duplicates subxs xs)
+ (if (= (car xs) subxs)
+ (list* (car xs) (remove-elem (cdr xs) subxs))
+ (list* (car xs) (remove-duplicates subxs (cdr xs)))))
+
+;;; Exercise 10
+
+(define (sublist-between start end xs)
+ (cond [(> start 0) (sublist-between (sub1 start) (sub1 end) (cdr xs))]
+ [(> end 1) (list* (car xs) (sublist-between 0 (sub1 end) (cdr xs)))]
+ [else (list (car xs))]))
+
+;;; Exercise 11
+
+(define (count-occurrences subxs xs)
+ (define (calc-iter occs lst)
+ (if (null? lst)
+ occs
+ (calc-iter (if (= (car lst) subxs) (add1 occs) occs)
+ (cdr lst))))
+ (calc-iter 0 xs))