Зад.1, Зад.2, Зад.3, Зад.4. - цък (примерно контролно 2016/2017г = реално контролно 2015/2016г)
Зад.5, Зад.6, Зад.7, Зад.8. - цък (примерно контролно 2015/2016г)

Зад.9. Да се напише функция (sublist? lst1 lst2), която проверява дали списъкът lst1 е подсписък на lst2 (аналогична на проверката за подстринг):
(sublist? '(2 3 4) '(1 2 3 4 5)) -> #t
(sublist? '(2 3 5) '(1 2 3 4 5)) -> #f ; тъй като търсените елементи не са последователни
(sublist? '(4 3 5) '(1 2 3 4 5)) -> #f
(sublist? '() '()) -> #t ;(!)
Упътване: можете да използвате помощна функция (begins-with? lst1 lst2), която да проверява дали списъка lst2 "започва със" списъка lst1:
(begins-with? '(2 3 4) '(2 3 4 5)) -> #t
(begins-with? '(2 3 4) '(2 3)) -> #f ;(!)
Зад.10. Да се напише функция (make-set lst), която взима произволен списък (вида на елементите му няма значение) и връща списък от същите елементи, без повторения.
Последователността на елементите в резултата няма значение, не се гони и сложност по време.
(make-set '(1 2 2 4 3 2 1 3)) -> '(1 2 4 3)                                 ; или друга тяхна пермутация
(make-set '("iei" 10 "oops" "iei" #t #t 10 #f)) -> '("iei" 10 "oops" #t #f) ; или друга тяхна пермутация
Зад.11. Да се напише функция (histogram lst), която взима произволен списък и връща списък от наредени двойки, представляващи всеки различен елемент на списъка lst, заедно с броя негови срещания в списъка:
(histogram '(a b b d c b a c)) -> '((a . 2) (b . 3) (d . 1) (c . 2)) ; отново подредбата няма значение
Зад.12. Да се напише функция (transpose m), която транспонира дадена матрица.
(transpose '((1 2 3) (4 5 6))) -> '((1 4)
                                    (2 5)
                                    (3 6))
Зад.13. Да се напише функция (triangular? m), която проверява дали дадена матрица е горно-триъгълна (всички елементи под главния диагонал са нули):
(triangular? '((1 2 3 4)
               (0 5 6 7)
               (0 0 8 9)
               (0 0 0 1))) -> #t
Зад.14. Да се напише функция (main-diag m), която връща главния диагонал на дадена матрица.
Зад.15. Да се напише функция (2nd-diag m), която връща второстепенния диагонал на матрица.
Зад.16. Да се напише функция (descartes lst1 lst2), която намира декартовото произведение на два списъка - наредените двойки от всеки елемент на единия списък със всеки елемент на другия.
Последователността на елементите в резултата няма значение.
(descartes '(1 2 3) '(a b)) -> ((1 . a) (2 . a) (3 . a)
                                (1 . b) (2 . b) (3 . b)) ; или друга тяхна пермутация


Последно модифициране: събота, 27 октомври 2018, 16:06