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))

 


Autori[ ZADANIE | AKO ZAČAŤ | RIEŠENIE ]
Posledná aktualizácia 4. 9. 2001
back  home  next