diff options
[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.rkt | 91 |
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)) |
