I tried this but it doesn't work. As constraints, I can't use predefined functions, only cond, eql and mapcar . I can't use also ifs or variables or loops
(defun countNodes (level tree)
(cond
((null tree) 0)
((eql level 0) 1)
(t (apply #'+ (mapcar (lambda (level subtree) (countNodes (1- level) subtree)) tree)))
)
)
(write (count-nodes-on-level '(1 (2 (3 (6 7) 4) 5)) 4))
This is the given error: *** - MAPCAR: A proper list must not end with1
I tried to look on stackoverflow for some answer but I didn't find anything that could help me
EDIT
(write (count-nodes '(a (b (c)) (d) (e (f))) 1))
will return 1
this is an example that i found and sorry for my mistake but I got wrong the definition of the supposed tree.It looks like the root is 'a' and it has 3 child, 'b' 'd' and 'e', 'c' is child of 'b' and 'f' is child of e
Given your example, without a precise definition of tree, I suppose that a tree is either an atom (meaning that it is a tree with root the atom, and without children), or a list, possibly empty, of which the car is the root, and the cdr is the list of the children.
With this hypothesis, here is a version of the function that can solve your problem:
(defun countNodes (level tree)
(cond ((null tree) 0)
((eql level 0) 1)
((atom tree) 0)
(t (apply #'+ (mapcar
(lambda (subtree) (countNodes (1- level) subtree))
(cdr tree))))))