Let's say you want to filter odd numbers from a list of numbers, like `[1,2,3,4,5,6]` should become `[1,3,5]`.

One way to solve this problem in a functional fashion is to provide an `odd` filter function, that is internally composed by a negation of an `even` filter on those numbers.

So, let's define these functions step by step:

``````function odd(number){
return not(even)
}

function not(predicate){
return function(){
return !predicate.apply(this, arguments)
}
}

function even(number){
return number % 2 == 0
}
``````

The `even` function needs no explaination, where the `functional magic ®` happens is in the `odd` and `not` functions.

`odd` takes a number and uses the `even` filter, by negating it with `not`, to determine whether a number is odd or not.

`not` just wraps the `predicate` function passed in and negates its application. Note that this application makes sense with functions that return boolean values, thus the name `predicate`.

One use case could be in combination with `Array.prototype.filter`:

``````[1,2,3,4,5,6].filter(not(even))

// or

[1,2,3,4,5,6].filter(odd)
``````