# Module `pl.func`

Functional helpers like composition, binding and placeholder expressions.

Placeholder expressions are useful for short anonymous functions, and were inspired by the Boost Lambda library.

    > utils.import 'pl.func'
    > ls = List{10,20,30}
    > = ls:map(_1+1)
    {11,21,31}

They can also be used to bind particular arguments of a function.

    > p = bind(print,'start>',_0)
    > p(10,20,30)
    > start>   10   20  30

See the Guide

Dependencies: pl.utils, pl.tablex

## Functions

import (tname, context) | wrap a table of functions.
register (fun[, name]) | register a function for use in placeholder expressions.
tail (ls) | all elements of a table except the first.
repr (e, lastpred) | create a string representation of a placeholder expression.
instantiate (e) | instantiate a PE into an actual function.
I (e) | instantiate a PE unless it has already been done.
bind1 (fn, p) | bind the first parameter of the function to a value.
compose (f, g, ...) | create a function which chains multiple functions.
bind (fn, ...) | bind the arguments of a function to given values.

## Functions

import (tname, context)
  wrap a table of functions. This makes them available for use in placeholder expressions.

  ### Parameters:

  - tname string a table name
  - context table context to put results, defaults to environment of caller
register (fun[, name])
  register a function for use in placeholder expressions.

  ### Parameters:

  - fun function a function
  - name string an optional name (optional)

  ### Returns:

  a placeholder functiond
tail (ls)
  all elements of a table except the first.

  ### Parameters:

  - ls table a list-like table.
repr (e, lastpred)
  create a string representation of a placeholder expression.

  ### Parameters:

  - e a placeholder expression
  - lastpred not used
instantiate (e)
  instantiate a PE into an actual function. First we find the largest placeholder used, e.g. 2; from this a list of the formal parameters can be build. Then we collect and replace any non-PE values from the PE, and build up a constant binding list. Finally, the expression can be compiled, and e.PEfunction is set.

  ### Parameters:

  - e a placeholder expression

  ### Returns:

  a function
I (e)
  instantiate a PE unless it has already been done.

  ### Parameters:

  - e a placeholder expression

  ### Returns:

  the function
bind1 (fn, p)
  bind the first parameter of the function to a value.

  ### Parameters:

  - fn function a function of one or more arguments
  - p a value

  ### Returns:

  a function of one less argument

  ### Usage:

      (bind1(math.max,10))(20) == math.max(10,20)

compose (f, g, ...)
  create a function which chains multiple functions.

  ### Parameters:

  - f function a function of at least one argument
  - g function a function of at least one argument
  - ... additional functions to compose

  ### Returns:

  a function

  ### Usage:

  -     printf = compose(io.write, string.format)

  -     printf = compose(io.write, string.lower, string.format)

bind (fn, ...)
  bind the arguments of a function to given values. `bind(fn,v,_2)` is equivalent to `bind1(fn,v)`.

  ### Parameters:

  - fn function a function of at least one argument
  - ... values or placeholder variables

  ### Returns:

  a function

  ### Usage:

  -     (bind(f,_1,a))(b) == f(a,b)

  -     (bind(f,_2,_1))(a,b) == f(b,a)

generated by LDoc 1.5.0