title: Returning a list created by applying function parameter to all elements equal to the value/predicate parameter
body: <p>Hey I've been searching for a while now with no clear direction. I know it's in the area of funcalls but am having trouble. My 2 questions are below. Also I'm not sure if I sure if I should be separating them into 2 different threads. Help please. Thank you!</p>
  
  <pre><code>;;
  ;;  returns a list created by applying its function parameter to all elements equal to the value parameter. All other elements remain unchanged 
  ;;
  
  (defun find-and-do (lst val fun)
    "(find-and-do '() 1 (lambda (x) (+ x 1))) → NIL
  (find-and-do '(1 2 3) 2 (lambda (x) (* x 2))) → (1 4 3)
  (find-and-do '(1 2 3) 2 (lambda (x) (* x 2))) → (1 4 3)
  (find-and-do '(1 2 3 4) 2 #'sqrt) → (1 1.4142135623730951 3 4) 
  (find-and-do '(a b c) 'b #'list) → (A (B) C) "
  
  ;(lambda (x) (funcall fun val ))) ; what I have so far
  ; I think id instead off val in the call above it would have to simultaneously pull the elements and modify them from a newly copied list
  )
  
  ;;
  ;;  same as find-and-do, but instead of matching a value, apply the function parameter to those elements for which the predicate parameter applied results in true. 
  ;;
  
  (defun test-and-do (lst predp fun)
    "(test-and-do '() #'evenp (lambda (x) (+ x 1))) → NIL
  (test-and-do '(1 2 3 4) #'evenp (lambda (x) (* x 2))) → (1 4 3 8)"
  
  ; no idea
  )
  </code></pre>