123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | ;Zaimplementowa i przetestowa funkcj:
;1. obliczajc dugo listy
(define (dl list)
(if (null? list)
0
(+ 1 (dl (cdr list)))
)
)
(display "(dl '(1 2 4)) => 3,\n");
(dl '(1 2 3))
;2. obliczającą sumę elementów na liście
(define (suma list)
(if (null? list)
0
(+ (car list) (suma (cdr list)))
))
(display "\n(suma '(1 2 4)) => 7,\n")
(suma '(1 2 4))
;3. obliczającą iloczyn elementów na liście
(define (iloczyn list)
(if (null? list)
1
(* (car list) (iloczyn (cdr list)))
))
(display "\n(iloczyn '(1 2 4)) => 8,\n")
(iloczyn '(1 2 4))
;4. obliczającą iloczyn skalarny dwóch list
(define (il-skal list1 list2)
(if (null? list1)
0
( + (* (car list1) (car list2)) (il-skal (cdr list1) (cdr list2)))
))
(display "\n(il-skal '(1 2 3) '(1 2 3)) => 14\n")
(il-skal '(1 2 3) '(1 2 3))
;5. obliczającą liczbę elementów na liście spełniających predykat
(define (count_if list pred)
(cond
((null? list) 0)
((pred (car list)) (+ 1 (count_if (cdr list) pred)))
(else
(count_if (cdr list) pred))
))
(display "\n(count_if '(3 5 2) odd?) => 2,\n")
(count_if '(3 5 2) odd?)
;6. obliczającą liczbę elementów o określonej wartości w liście
(define (count_elem list arg)
(cond
((null? list) 0)
((= (car list) arg) (+ 1 (count_elem (cdr list) arg)))
(else
(count_elem (cdr list) arg))
))
(display "\n(count_elem '(1 1 2 3 1) 1) => 3,\n")
(count_elem '(1 1 2 3 1) 1)
;7. przyjmującą listę i predykat, elementy, które spełniają ten predykat powinny być
;przekopiowane do listy wynikowej
(define (copy_if list pred)
(cond
((null? list) '())
((pred (car list)) (cons (car list) (copy_if (cdr list) pred)))
(else
(copy_if (cdr list) pred))))
(display "\n(copy_if '(1 2 3 4 5) odd?) => (1 3 5),\n")
(copy_if '(1 2 3 4 5) odd?)
;8. tworzącą listę, której elementy są kolejnymi sumami elementów dwóch list
(define (suma-list list1 list2)
(if (null? list1)
'()
(cons (+ (car list1) (car list2)) (suma-list (cdr list1) (cdr list2)))
))
(display "\n(suma-list '(1 2 3) '(1 2 3)) => (2 4 6),\n")
(suma-list '(1 2 3) '(1 2 3))
;9. tworzącą listę zawierającą n określonych parametrem liczb
(define (wypelnij czym ile)
(if (= 0 ile)
'()
(cons czym (wypelnij czym (- ile 1)))
))
(display "\n(wypelnij 10 3) => (10 10 10),\n")
(wypelnij 10 3)
;10. znajdującą maksymalny element na liście
(define (maksymalna lista)
(define (pomocnicza wstepny lista1)
(cond
((null? lista1) wstepny)
((> (car lista1) wstepny) (pomocnicza (car lista1) (cdr lista1)))
(else
(pomocnicza wstepny (cdr lista1))
)))
(pomocnicza (car lista) (cdr lista)))
(display "\n(maksymalna '(4 2 10 1)) => 10,\n")
(maksymalna '(4 2 10 10))
;11. znajdującą i zwracającą pierwszy element spełniający predykat
(define (pierwszy list pred)
(cond
((null? list) '())
((pred (car list)) (car list))
(else
(pierwszy (cdr list) pred))
))
(display "\n(pierwszy '(4 6 8 3 3) odd?) => 3,\n")
(pierwszy '(4 6 8 3 3) odd?)
;12. tworzącą listę zawierającą elementy z listy docelowej zmodyfikowane przekazywaną jako
;drugi parametr funkcją
(define (mapa list pred)
(if (null? list) '()
(cons (pred (car list)) (mapa (cdr list) pred))
))
(display "\n(mapa '(4 16 36) sqrt) => (2 4 6)\n")
(mapa '(4 16 36) sqrt)
|