VL-REMOVE-IF removes the current element of lst if the predicate-function returns anything else than nil.
The normal way of thinking about it is to evaluate each item within the LAMBDA. For example something like:
(vl-remove-if (function (lambda (n)(> n 2))) '(1 2 3 4 1 2 3 4))
-> (1 2 1 2)
But, because LAMBDA will run through every item of the list by merely supplying it as an argument, there is no need to evaluate it further.
For example, if the predicate function always returned T, it would remove each item as it is supplied to LAMBDA's argument n:
(vl-remove-if (function (lambda (n) T)) '(1 2 3 4 1 2 3 4))
-> nil
.. and if it always returned nil then no items would be removed:
(vl-remove-if (function (lambda (n) nil)) '(1 2 3 4 1 2 3 4))
-> (1 2 3 4 1 2 3 4)
To confirm that LAMBDA do evaluate each item, you could do something like:
(vl-remove-if (function (lambda (n)(princ n))) '(1 2 3 4 1 2 3 4))
-> 12341234nil
Of course, it returns nil because it removes each item (PRINC returns a null character, not nil).