zsh_functional/README.md

94 lines
2.2 KiB
Markdown
Raw Normal View History

2011-11-03 14:21:08 +00:00
# ZSH higher order functions
You can look at [yogsototh's blogpost] for the idea of higher order functions
in zsh.
2011-11-03 14:21:08 +00:00
2012-07-10 14:39:13 +00:00
## Install
2012-07-10 14:58:03 +00:00
If you are lazy just paste the following lines in your terminal:
2012-07-10 14:39:13 +00:00
cd /tmp && \
curl -O https://raw.github.com/yogsototh/zsh_functional/master/install.sh && \
2012-07-10 14:59:46 +00:00
chmod u+x install.sh && . ./install.sh && \rm -f ./install.sh
2012-07-10 14:39:13 +00:00
2012-07-10 14:49:22 +00:00
If you want to have more control,
clone this repo to `~/.zsh/functional` and add
2011-11-03 14:21:08 +00:00
2012-07-08 11:51:07 +00:00
. ~/.zsh/functional/load
2011-11-03 14:21:08 +00:00
to your `.zshrc`
2012-07-08 11:42:00 +00:00
2012-07-10 14:58:03 +00:00
## 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.
[yogsototh's blogpost]: http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/
[Sterling's blogpost]: http://nicholassterling.wordpress.com/2012/03/30/a-zsh-map-function/