zsh_functional/README.md
2012-07-10 16:59:46 +02:00

2.2 KiB

ZSH higher order functions

You can look at yogsototh's blogpost for the idea of higher order functions in zsh.

Install

If you are lazy just paste the following lines in your terminal:

cd /tmp && \
curl -O https://raw.github.com/yogsototh/zsh_functional/master/install.sh && \
chmod u+x install.sh && . ./install.sh && \rm -f ./install.sh

If you want to have more control, clone this repo to ~/.zsh/functional and add

. ~/.zsh/functional/load

to your .zshrc

Examples

Here are some examples with named functions (map, filter, fold):

$ insideXY(){print -- "X $1 Y"}
$ map insideXY a b c d
X a Y
X b Y
X c Y
X d Y

$ add(){print -- $(($1+$2))}
$ fold add {1..5}
15

Here are some examples of using anonymous functions (*l and *a):

$ filterl 'echo $1|grep a >/dev/null' ab cd ef ada
ab
ada

$ folda '$1+$2' {1..5}
15

$ folda '$1*$2' {1..20}
2432902008176640000

$ mapl 'echo X $1:t Y' ~/.zsh/functional/src/*
X each Y
X filter Y
X fold Y
X map Y

$ mapa '$1*2' {1..3}
2
4
6

$ mapl 'echo result $1' $(mapa '$1+5' $(mapa '$1*2' {1..3}))
result 7
result 9
result 11

Usage and documentation

Please refer to the tests so far until I've written simple proper docs for each function. The function map and family will print out documentation for you when calling them with no arguments.

Each of the method families, map, each, filter and fold are having a "normal version" accompanied with lambda function version and a arithmetic lambda version.

Lambda functions

Use the versions ending with l, like mapl, eachl, foldl.

Arithmetic lambda functions

Similarly, use the functions ending with a.

Contributing

Good idea! Just add a test and implement the new functionality and send away your pull request! :)

Creds

Yann Esposito for the HoF idea and big thanks to Sterling's blogpost for discovering and starting implementing the anonymous function features.