I've been looking around and still don't understand how funcall works. Would really appreciate if someone can give me a suggestion on ways to approach an think about the problem. I know that "fun" will have to be a predicate function, but after that I'm stuck
btw, an item satisfies a function if the function returns true when that item is used as the function’s argument.
To your problem:
Such kind of a function exists in base common-lisp already as
filter
.