the exercise says:
"""Define iterative and recursive versions of a function that takes an object x and vector v, and returns a list of all the objects that immediately precede x in v:
> (precedes #\a "abracadabra")
(#\c #\d #\r) """
ok, my solution (iterative mode):
Code: Select all
(defun precedes(car vec)
(let((lista nil))
(dotimes (i (length vec))
(if (and (equal (aref vec i) car)(> i 0))
(setf lista (cons (aref vec (- (position car vec :start i) 1)) lista))))
lista))
Code: Select all
(defun presedes (x v)
(let (acc (v (concatenate 'vector v))) ;; on book ther's v1 instead v...;)
(dotimes (i (length v))
(if (and (eql x (svref v i)) (< 0 i))
(push (svref v (- i 1)) acc)))
(remove-duplicates acc)))
probably my solution runs slower then correct solution, isn't it?? becouse my solution sets 'list' for each iteration and lacks "remove-duplicates " that parse the vector...
then, is my solution more inefficient than correct solution? then is always preferable works with latter?
thanks in advance