Možným riešením je
implementovať funcie vrats1s a vratrest1s.
Vrat1s vráti ako zoznam (riadok) prvý stĺpec
matice,
vratrest1s vráti celú maticu bez prvého
stĺpca.
V hlavnej funkcií potom postupne prechádzame maticu a stĺpce
meníme na riadky.
Predpokladaná syntax
matice je nasledovná.
Zoznam, ktorý obsahuje na najvyššej úrovni neprázdne zoznamy
(riadky matice). Prázdna matica sa reprezentuje jedným
prázdnym zoznamom. Ak by mala byt reprezentácia iná, treba
funkcie v našom riešení upraviť.
Správnosť syntaxe matice sa nekontroluje.
(defun vrat1s (zoz)
(cond ((null zoz) NIL)
(T (cons (first (first zoz)) (vrat1s (rest zoz))))
)
)
(defun vratrest1s (zoz)
(cond ((null zoz) NIL)
(T (cons (rest (first zoz)) (vratrest1s (rest zoz))))
)
)
; Hlavná funkcia.
(defun transponuj (zoz)
(cond ((null zoz) NIL)
((null (first zoz)) NIL)
(T (cons (vrat1s zoz) (transponuj (vratrest1s zoz))))
)
)
; Príklady:
(transponuj '()) ; -> NIL
(transponuj '((1 2 3)(4 5 6))) ; -> ((1 4)(2 5)(3 6))
(transponuj '((1 2 3))) ; -> ((1)(2)(3))
(transponuj '((1)(2)(3))) ; -> ((1 2 3))