Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun maxdep (lista d maxd) ;max dlabocina vo lista
- (cond
- ((null lista) maxd)
- ((atom (car lista)) (maxdep (cdr lista) d maxd))
- (T (maxdep (cdr lista) d (maxdep (car lista) (+ 1 d) (max (+ 1 d) maxd))))
- )
- )
- (defun len (lista) ;broj na elementi vo lista
- (cond
- ((null lista) 0)
- ((listp (car lista)) (+ (len (car lista)) (len (cdr lista))))
- (t (+ (len (cdr lista)) 1))
- )
- )
- (defun lenDepth (lista cd d) ;dali ima elementi na odredeno nivo
- (cond
- ((null lista) 0)
- ((and (listp (car lista)) (> (+ 1 cd) d))
- (lenDepth (cdr lista) cd d))
- ((listp (car lista))
- (+ (lenDepth (car lista) (+ 1 cd) d) (lenDepth (cdr lista) cd d)))
- ((and (atom (car lista)) (eq cd d)) (+ 1 (lenDepth (cdr lista) cd d)))
- (T (lenDepth (cdr lista) cd d))
- )
- )
- (defun getLastOddByDepth (l cd d pos last)
- (cond
- ((null l) last)
- ((and (listp (car l)) (> (+ cd 1) d))
- (getLastOddByDepth (cdr l) cd d (+ (len (car l)) pos) last))
- ((listp (car l))
- (getLastOddByDepth (cdr l) cd d (+ (len (car l)) pos) (getLastOddByDepth (car l) (+ cd 1) d pos last)))
- ((and (atom (car l)) (eq cd d) (oddp (car l)))
- (getLastOddByDepth (cdr l) cd d (+ pos 1) pos))
- (T (getLastOddByDepth (cdr l) cd d (+ pos 1) last))
- )
- )
- (defun deleteLastOdd (lista pos last) ;brisenje na posleden neparen
- (cond
- ((null lista) nil)
- ((listp (car lista))
- (append (list (deleteLastOdd (car lista) pos last))(deleteLastOdd (cdr lista) (+ pos (len (car lista))) last)))
- ((and (atom (car lista)) (eq pos last)) (deleteLastOdd (cdr lista) (+ pos 1) last))
- (T (cons (car lista) (deleteLastOdd (cdr lista) (+ pos 1) last)))
- )
- )
- (defun removeNil (l)
- (cond
- ((null l) nil)
- ((and (listp (car l)) (= 0 (len (car l)))) (removeNil (cdr l)))
- ((listp (car l)) (cons (removeNil (car l)) (removeNil (cdr l))))
- (t (cons (car l) (removeNil (cdr l))))
- )
- )
- (defun pomosna (lista dep)
- (cond
- ((eq dep -1) lista)
- ((eq 0 (lenDepth lista 0 dep)) (pomosna lista (- dep 1)))
- (T (pomosna (deleteLastOdd lista 0 (getLastOddByDepth lista 0 dep 0 -1)) (- dep 1)))
- )
- )
- (defun konecna (lista)
- (removeNil (pomosna lista (maxdep lista 0 0)))
- )
- (print (konecna '(1 5 (3 (8) 6 (7 (9)))(4 (11 (20 ((2))) 13)) (7 ((1) (5))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement