Advertisement
Guest User

Untitled

a guest
Jan 12th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (defun maxdep (lista d maxd)  ;max dlabocina vo lista
  2.     (cond
  3.         ((null lista) maxd)
  4.         ((atom (car lista)) (maxdep (cdr lista) d maxd))
  5.         (T (maxdep (cdr lista) d (maxdep (car lista) (+ 1 d) (max (+ 1 d) maxd))))
  6.         )
  7.     )
  8.  
  9. (defun len (lista)    ;broj na elementi vo lista
  10.     (cond
  11.         ((null lista) 0)
  12.         ((listp (car lista)) (+ (len (car lista)) (len (cdr lista))))
  13.         (t (+ (len (cdr lista)) 1))
  14.         )
  15.     )
  16.  
  17. (defun lenDepth (lista cd d)    ;dali ima elementi na odredeno nivo
  18.     (cond
  19.         ((null lista) 0)
  20.         ((and (listp (car lista)) (> (+ 1 cd) d))
  21.              (lenDepth (cdr lista) cd d))
  22.         ((listp (car lista))
  23.               (+ (lenDepth (car lista) (+ 1 cd) d) (lenDepth (cdr lista) cd d)))
  24.         ((and (atom (car lista)) (eq cd d)) (+ 1 (lenDepth (cdr lista) cd d)))
  25.         (T (lenDepth (cdr lista) cd d))
  26.         )
  27.    )
  28.  
  29.  
  30. (defun getLastOddByDepth (l cd d pos last)
  31.     (cond
  32.         ((null l) last)
  33.         ((and (listp (car l)) (> (+ cd 1) d))
  34.                (getLastOddByDepth (cdr l) cd d (+ (len (car l)) pos) last))
  35.         ((listp (car l))
  36.          (getLastOddByDepth (cdr l) cd d (+ (len (car l)) pos) (getLastOddByDepth (car l) (+ cd 1) d pos last)))
  37.         ((and (atom (car l)) (eq cd d) (oddp (car l)))
  38.              (getLastOddByDepth (cdr l) cd d (+ pos 1) pos))
  39.         (T (getLastOddByDepth (cdr l) cd d (+ pos 1) last))
  40.         )
  41.     )
  42.  
  43. (defun deleteLastOdd (lista pos last)    ;brisenje na posleden neparen
  44.     (cond
  45.         ((null lista) nil)
  46.         ((listp (car lista))
  47.          (append (list (deleteLastOdd (car lista) pos last))(deleteLastOdd (cdr lista) (+ pos (len (car lista))) last)))
  48.         ((and (atom (car lista)) (eq pos last)) (deleteLastOdd (cdr lista) (+ pos 1) last))
  49.         (T (cons (car lista) (deleteLastOdd (cdr lista) (+ pos 1) last)))
  50.         )
  51.     )
  52.  
  53.  
  54. (defun pomosna (lista dep)
  55.     (cond
  56.         ((eq dep -1) lista)
  57.         ((eq 0 (lenDepth lista 0 dep)) (pomosna lista (- dep 1)))
  58.         (T (pomosna (deleteLastOdd lista 0 (getLastOddByDepth lista 0 dep 0 -1)) (- dep 1)))
  59.         )
  60.     )
  61.  
  62. (defun konecna (lista)
  63.     (pomosna lista (maxdep lista 0 0))
  64.     )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement