README.md

# Exyz

Provides a Z-combinator (but no Y-combinator) macro and function to facilitate
recursive anonymous functions.

## What is a Z-combinator?
It's a strict fixed point combinator.

### What's a strict fixed point combinator
It's a fixed point combinator for strict languages.

#### What's a fixed point combinator
It's a higher order function thats result, when used as input again, is the same.

#### What?
( ͡° ͜ʖ ͡° )

## Usage
With the function:
```elixir
iex(1)> factorial = Exyz.z_combinator fn(f) ->
...(1)>   fn
...(1)>     (1) -> 1
...(1)>     (n) -> n * f.(n - 1)
...(1)>   end
...(1)> end
iex(2)> factorial.(5) == 120
true
```

Or save two lines with the macro:
```elixir
iex(1)> factorial = Exyz.z fn
...(1)>   (1) -> 1
...(1)>   (n) -> n * this.(n - 1)
...(1)> end
iex(2)> factorial.(5) == 120
true
```