School Commit Init
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
; 7. Return the level of a node X in a tree of type (1). The level of the root element is 0.
|
||||
|
||||
;; writeNode(node, val) = print(Node {node} is at level {val})
|
||||
|
||||
|
||||
;; getLevelAux(elementToSearch, currentNode, currentLevel, numberOfChildren, l1...ln) = {
|
||||
;; l1...ln, numberOfChildren = 0 OR n = 1,
|
||||
;; [], n = 0,
|
||||
;; [currentLevel], elementToSearch = currentNode
|
||||
;; getLevelAux(elementToSearch, currentNode, currentLevel, numberOfChildren - 1, getLevelAux(elementToSearch, l1, currentLevel + 1, l2, l3...ln)), otherwise
|
||||
;; }
|
||||
|
||||
(defun getLevelAux (elementToSearch currentNode currentLevel numberOfChildren remainingList)
|
||||
;; (print remainingList)
|
||||
(cond
|
||||
((eq elementToSearch currentNode) ;; found the elmement
|
||||
(list currentLevel))
|
||||
((null (cdr remainingList)) ;; there is only the level left in the remainingList
|
||||
remainingList)
|
||||
((eq numberOfChildren 0) ;; No more children to search
|
||||
remainingList)
|
||||
((null remainingList) ;; no element found + nowhere to search
|
||||
nil)
|
||||
(t (getLevelAux
|
||||
elementToSearch
|
||||
currentNode
|
||||
currentLevel
|
||||
(- numberOfChildren 1)
|
||||
(getLevelAux
|
||||
elementToSearch
|
||||
(car remainingList)
|
||||
(+ currentLevel 1)
|
||||
(cadr remainingList)
|
||||
(cddr remainingList))))))
|
||||
|
||||
;; getLevel(elementToSearch, l1...ln) = getLevelAux(elementToSearch, l1, 0, l2, l3...ln)
|
||||
(defun getLevel (elementToSearch fullList)
|
||||
elementToSearch
|
||||
(car
|
||||
(getLevelAux
|
||||
elementToSearch
|
||||
(car fullList)
|
||||
0
|
||||
(cadr fullList)
|
||||
(cddr fullList))))
|
||||
|
||||
(print (getLevel 'C (list 'A 2 'B 0 'C 2 'D 0 'E 0)))
|
||||
|
||||
(print (getLevel 'F (list 'A 2 'B 0 'C 2 'D 1 'F 0 'E 0)))
|
||||
|
||||
(print (getLevel 'F (list 'A 2 'B 0 'C 2 'D 1 'E 0 'F 0)))
|
||||
|
||||
(print (getLevel 'F (list 'A 2 'B 0 'C 2 'D 0 'E 0)))
|
||||
|
||||
(print (getLevel 'C (list 'A 2 'B 2 'D 0 'E 1 'H 0 'C 2 'F 1 'I 0 'G 0)))
|
||||
|
||||
|
||||
|
||||
(exit)
|
||||
|
||||
;; tema 12
|
||||
Reference in New Issue
Block a user