Advertisement
Guest User

Untitled

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