Initial commit
This commit is contained in:
commit
01c4844827
4 changed files with 90 additions and 0 deletions
15
README.md
Normal file
15
README.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# ZSH higher order functions
|
||||
|
||||
|
||||
You can look at [this article<sup>†</sup>](http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/) to have more informations.
|
||||
|
||||
To install just clone it to `~/.zsh/functional` and add
|
||||
|
||||
# Load functions
|
||||
func_reps=( ~/.zsh/functional/src )
|
||||
for rep in $func_reps; do
|
||||
fpath=($rep $fpath)
|
||||
autoload -U $rep/*(:t)
|
||||
done
|
||||
|
||||
to your `.zshrc`
|
29
src/filter
Executable file
29
src/filter
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env zsh
|
||||
# usage:
|
||||
#
|
||||
# $ baz() { print $1 | grep baz }
|
||||
# $ filter baz titi bazaar biz
|
||||
# bazaar
|
||||
# filter() {
|
||||
(($#<1)) && {
|
||||
{
|
||||
print -- "usage: filter func list"
|
||||
print
|
||||
print -- "example:"
|
||||
print -- ' > baz(){print "$*" | grep baz}'
|
||||
print -- ' > filter baz titi bazaar biz'
|
||||
print -- ' bazaar'
|
||||
} >&2
|
||||
return 1
|
||||
}
|
||||
local predicate=$1
|
||||
local result
|
||||
typeset -a result
|
||||
shift
|
||||
for elem in $@; do
|
||||
if eval $predicate $elem >/dev/null; then
|
||||
result=( $result $elem )
|
||||
fi
|
||||
done
|
||||
print $result
|
||||
# }
|
27
src/fold
Executable file
27
src/fold
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env zsh
|
||||
if (($#<2)) {
|
||||
{
|
||||
print -- 'usage: fold function list'
|
||||
print
|
||||
print -- 'example:'
|
||||
print -- ' > bar() { print $(($1 + $2)) }'
|
||||
print -- ' > fold bar 0 1 2 3 4 5'
|
||||
print -- ' 15'
|
||||
} >&2
|
||||
return 1
|
||||
}
|
||||
if (($#<3)) {
|
||||
print -- $2
|
||||
return 0
|
||||
} else {
|
||||
local acc
|
||||
local right
|
||||
local func_name=$1
|
||||
local init_value=$2
|
||||
local first_value=$3
|
||||
shift 3
|
||||
right=$( fold $func_name $init_value $@ )
|
||||
acc=$( eval "$func_name $first_value $right" )
|
||||
print -- $acc
|
||||
return 0
|
||||
}
|
19
src/map
Executable file
19
src/map
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
map() {
|
||||
(($#<1)) && {
|
||||
print -- "usage: map funcname [list]"
|
||||
print
|
||||
print -- 'example:'
|
||||
print -- ' > foo(){print "x: $1"}'
|
||||
print -- ' > map foo a b c d'
|
||||
print -- ' x: a'
|
||||
print -- ' x: b'
|
||||
print -- ' x: c'
|
||||
print -- ' x: d'
|
||||
return 1
|
||||
}
|
||||
local func_name=$1
|
||||
shift
|
||||
for elem in $@; print -- $(eval $func_name $elem)
|
||||
}
|
Loading…
Reference in a new issue