Funkcia rozdel rozdelí zoznam okolo význačného prvku. Napríklad (1 2 vp 3 4 7) -> ((1 2) (3 4 7)). A potom v hlavnej funkcií porovnaj porovnáme časti tohto rozdeleného zoznamu.


Predpokladáme, že zoz je neprázdny, ak mal byť aj prázdny,
treba funkciu porovnaj upraviť,
Napríklad vložiť cond s prvou podmienkou ((null zoz) NIL).
Druha podmienka by potom bola (T (equal...)).

(defun porovnaj (zoz vp)
(equal (first (rozdel zoz vp NIL)) (first (rest (rozdel zoz vp NIL))))
)

Príklady použitia:
(porovnaj '(1 (2) c x 1 (2) c) 'x) -> T
(porovnaj '(1 2 c x 1 2) 'x)       -> NIL
(porovnaj '(1 2 3) 'x) ;           -> NIL

Funkcia rozdel. Nájde prvý výskyt atómu vp a zoznam rozdelí.


V azoz (aktuálny zoznam) je časť pôvodného zoznamu,
ktorú sme už preskúmali.
Pomocný argument azoz funkciu zjednoduší
(pri použití sa má inicializovať na NIL).
Zoz je neprázdny, ak by mal byť aj prázdny, treba funkciu upraviť.

(defun rozdel (zoz vp azoz)
 (cond ((null zoz) (list azoz NIL))
       ((eq vp (first zoz)) (list azoz (rest zoz)))
       (T (rozdel (rest zoz) vp (append azoz (cons (first zoz) NIL))))
 )
)

Príklady použitia:
(rozdel '(9 2 vpr 3 4 5) 'vpr NIL) -> ((9 2)(3 4 5))
(rozdel '(1 2) 'x NIL) -> ((1 2) ())

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