План:

  • Вложени списъци.
  • Матрици.


Интерактивна сесия: REPL.it

Задача 1: Напишете функция (depth lst), която връща нивото на влагане на даден списък. За да проверите дали дадена стойност е списък, използвайте предиката (list? x).

(depth '(1 2 3)) ; => 1
(depth (cons 1 2)) ; => 0

(depth '(1 (2 (3)) 4)) ; => 3


Задача 2: Напишете функция (flatten lst), която премахва влаганията от даден списък.

(flatten '()) ; => ()
(flatten '(1 (2 (3) () 4) ((5 () (6))))) ; => (1 2 3 4 5 6)


Задача 3: Напишете предикат, който приема списък от списъци от числа и връща #t точно когато някой от списъците съдържа елемент, който е равен на сумата на елементите на някой от останалите списъци. Приемете, че празните списъци имат сума на елементите 0.

(funky? '((0 1 -1) (1 1) (2 3))) ; => #t; 2 = 1 + 1 (funky? '((0 1 -1) (1 1) (1 3))) ; => #f


Задача 4: Напишете функция (transpose m), която транспонира матрицата m.

(transpose '((1 2 3)
             (4 5 6)))
; => ((1 4)
;     (2 5)
;     (3 6))


Задача 5: Напишете функция (main-diag m), която връща елементите от главния диагонал на m.

(main-diag '((1 2) (3 4) (5 6))) ; => (1 4)
(main-diag '((1 2 3) (4 5 6))) ; => (1 5)


Задача 6: Напишете функция (determinant m), която пресмята детерминантата на квадратна матрица m.

(determinant
  '((1 0 2 -1)
    (3 0 0 5)
    (2 1 4 -3)
    (1 0 5 0))) ; => 30



Последно модифициране: понеделник, 14 ноември 2016, 20:08