Currently trying to write a filter function that takes a list of procedures and a list of numbers, deletes the procedures that does not return true on every element of the list of numbers.
What I have done is the following, currently taking a single procedure and runs through the list to create a list stating whether the procedure is true or false for each element.
Using foldr, or map if required (non recursive)
(define (my-filter ps xs)
(foldr (λ (x y)
(cons (ps x) y)) '() xs))
How do I delete the procedure if it has at lease one #f?
i.e. currently
> (my-filter even? '(1 2 3 4))
(#f #t #f #t)
> (my-filter even? (2 4))
(#t #t)
want
> (my-filter (list even?) '(1 2 3 4))
(list)
> (my-filter (list even?) '(2 4))
(list even?)
Start with some wishful thinking. Say we have a know of knowing if all
xs
return#t
for any givenf
Now let's define
every?
Let's check it out for
(list even?)
Let's add another test in the mix
Cool !
If you want to see "pretty" procedure names instead of the
#<procedure:...>
stuff, you can mapobject-name
over the resulting array