2017-08-15 17:43:11 -04:00
|
|
|
#!/bin/bash
|
|
|
|
source ../src/fun.sh
|
|
|
|
|
|
|
|
seq 1 4 | sum
|
|
|
|
seq 1 4 | product
|
|
|
|
factorial 4
|
2019-09-30 18:02:34 -04:00
|
|
|
seq 1 4 | scanl lambda a b . 'echo $(plus $a $b)'
|
2017-08-15 17:43:11 -04:00
|
|
|
echo map mul
|
|
|
|
seq 1 4 | map lambda a . 'echo $(mul $a 2)'
|
|
|
|
echo map sub
|
|
|
|
seq 1 4 | map lambda a . 'echo $(sub $a 2)'
|
2019-09-30 18:02:34 -04:00
|
|
|
echo map plsu
|
|
|
|
seq 1 4 | map lambda a . 'echo $(plus $a 2)'
|
2017-08-15 17:43:11 -04:00
|
|
|
echo map div
|
|
|
|
seq 1 4 | map lambda a . 'echo $(div $a 2)'
|
|
|
|
echo map mod
|
|
|
|
seq 1 4 | map lambda a . 'echo $(mod $a 2)'
|
|
|
|
echo 'list & head'
|
2019-09-30 18:02:34 -04:00
|
|
|
list 1 2 3 4 5 | lhead
|
2017-08-15 17:43:11 -04:00
|
|
|
list {1..2} | append {3..4} | prepend {99..102}
|
|
|
|
list {1..2} | unlist
|
2019-09-30 18:02:34 -04:00
|
|
|
list {1..10} | lhead
|
2017-08-15 17:43:11 -04:00
|
|
|
list {1..10} | drop 7
|
|
|
|
list {1..10} | take 3
|
|
|
|
list {1..10} | last
|
|
|
|
list {1..10} | map λ a . 'echo $(mul $a 2)'
|
|
|
|
|
|
|
|
id() {
|
|
|
|
λ x . '$x'
|
|
|
|
}
|
|
|
|
|
|
|
|
id <<< 'echo :)'
|
|
|
|
|
|
|
|
foobar() {
|
|
|
|
product | λ l . 'list {1..$l}' | sum | md5sum
|
|
|
|
}
|
|
|
|
|
|
|
|
list {1,2,3} | foobar
|
|
|
|
|
|
|
|
echo -n abcdefg | revers_str # gfedcba
|
|
|
|
echo -n abcdefg | splitc | join , '[' ']' # [a,b,c,d,e,f,g]
|
|
|
|
echo -n abcdefg | splitc | revers | join , '[' ']' # [g,f,e,d,c,b,a]
|
|
|
|
|
|
|
|
echo -n ' abcdefg' | splitc | foldr lambda a b . 'echo $a$b' # gfedcba
|
|
|
|
|
|
|
|
echo 'ls' | try λ cmd status ret . 'echo $cmd [$status]; echo $ret'
|
|
|
|
|
|
|
|
list {1..10} | filter lambda a . '[[ $(mod $a 2) -eq 0 ]] && ret true || ret false' | join , '[' ']' # [2,4,6,8,10]
|
2017-08-22 03:37:44 -04:00
|
|
|
|
|
|
|
function add() {
|
|
|
|
expr $1 + $2
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
curry add3 add 3
|
2017-08-22 19:03:01 -04:00
|
|
|
add3 9
|
|
|
|
|
|
|
|
list a b c d | foldl lambda acc el . 'echo -n $acc-$el'
|
2017-08-22 21:34:51 -04:00
|
|
|
list '' a b c d | foldr lambda acc el . 'if [[ ! -z $acc ]]; then echo -n $acc-$el; else echo -n $el; fi'
|
|
|
|
|
|
|
|
seq 1 4 | foldl lambda acc el . 'echo $(($acc + $el))'
|
|
|
|
|
|
|
|
#1 - 2 - 3 - 4
|
|
|
|
seq 1 4 | foldl lambda acc el . 'echo $(($acc - $el))'
|
|
|
|
#1 - 4 - 3 - 2
|
|
|
|
seq 1 4 | foldr lambda acc el . 'echo $(($acc - $el))'
|
|
|
|
|
|
|
|
#1 + (1 + 1) * 2 + (4 + 1) * 3 + (15 + 1) * 4 = 64
|
|
|
|
|
|
|
|
seq 1 4 | foldl lambda acc el . 'echo $(mul $(($acc + 1)) $el)'
|
|
|
|
|
|
|
|
#1 + (1 + 1) * 4 + (8 + 1) * 3 + (27 + 1) * 2 = 56
|
|
|
|
seq 1 4 | foldr lambda acc el . 'echo $(mul $(($acc + 1)) $el)'
|
|
|
|
|
|
|
|
tup a 1
|
|
|
|
tupl $(tup a 1)
|
|
|
|
tupr $(tup a 1)
|
|
|
|
tup a 1 | tupl
|
|
|
|
tup a 1 | tupr
|
|
|
|
|
|
|
|
seq 1 10 | buff lambda a b . 'echo $(($a + $b))'
|
|
|
|
echo 'XX'
|
|
|
|
seq 1 10 | buff lambda a b c d e . 'echo $(($a + $b + $c + $d + $e))'
|
|
|
|
|
2019-09-30 18:02:34 -04:00
|
|
|
list a b c d e f | lzip $(seq 1 10)
|
2017-08-22 21:34:51 -04:00
|
|
|
|
|
|
|
echo
|
2019-09-30 18:02:34 -04:00
|
|
|
list a b c d e f | lzip $(seq 1 10) | last | tupr
|
2017-08-22 21:34:51 -04:00
|
|
|
|
|
|
|
arg='[key1=value1,key2=value2,key3=value3]'
|
|
|
|
get() {
|
|
|
|
local pidx=$1
|
|
|
|
local idx=$2
|
|
|
|
local arg=$3
|
|
|
|
echo $arg | tr -d '[]' | cut -d',' -f$idx | cut -d'=' -f$pidx
|
|
|
|
}
|
|
|
|
|
|
|
|
curry get_key get 1
|
|
|
|
curry get_value get 2
|
|
|
|
|
|
|
|
get_key 1 $arg
|
|
|
|
get_value 1 $arg
|
|
|
|
|
|
|
|
seq 1 3 | map lambda a . 'tup $(get_key $a $arg) $(get_value $a $arg)'
|
|
|
|
|
|
|
|
echo 'ls /home' | try λ cmd status ret . 'echo $cmd [$status]; echo $ret'
|
|
|
|
echo '/home' | try λ cmd status ret . 'echo $cmd [$status]; echo $ret'
|
|
|
|
|
|
|
|
seq 1 5 | scanl lambda a b . 'echo $(($a + $b))'
|
|
|
|
seq 1 5 | scanl lambda a b . 'echo $(($a + $b))' | last
|
|
|
|
|
|
|
|
seq 2 3 | map lambda a . 'seq 1 $a' | join , [ ]
|
|
|
|
list a b c | map lambda a . 'echo $a; echo $a | tr a-z A-z' | join , [ ]
|
|
|
|
|
|
|
|
echo 0 | cat - <(curl -s https://raw.githubusercontent.com/ssledz/bash-fun/v1.1.1/src/fun.sh) | \
|
|
|
|
map lambda a . 'list $a' | foldl lambda acc el . 'echo $(($acc + 1))'
|
|
|
|
|
|
|
|
echo 0 | cat - <(curl -s curl -s https://raw.githubusercontent.com/ssledz/bash-fun/v1.1.1/src/fun.sh) \
|
2018-02-13 19:19:43 -05:00
|
|
|
| foldl lambda acc el . 'echo $(($acc + 1))'
|
|
|
|
|
|
|
|
|
|
|
|
factorial() {
|
|
|
|
fact_iter() {
|
|
|
|
local product=$1
|
|
|
|
local counter=$2
|
|
|
|
local max_count=$3
|
|
|
|
if [[ $counter -gt $max_count ]]; then
|
|
|
|
echo $product
|
|
|
|
else
|
|
|
|
fact_iter $(echo $counter\*$product | bc) $(($counter + 1)) $max_count
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
fact_iter 1 1 $1
|
|
|
|
}
|
|
|
|
|
|
|
|
factorial_trampoline() {
|
|
|
|
fact_iter() {
|
|
|
|
local product=$1
|
|
|
|
local counter=$2
|
|
|
|
local max_count=$3
|
|
|
|
if [[ $counter -gt $max_count ]]; then
|
|
|
|
res $product
|
|
|
|
else
|
|
|
|
call fact_iter $(echo $counter\*$product | bc) $(($counter + 1)) $max_count
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
with_trampoline fact_iter 1 1 $1
|
|
|
|
}
|
|
|
|
|
|
|
|
echo Factorial test
|
|
|
|
|
|
|
|
time factorial 30
|
|
|
|
time factorial_trampoline 30
|
|
|
|
|
2019-09-30 18:02:34 -04:00
|
|
|
# would be error
|
|
|
|
#time factorial 60
|
2018-02-13 19:19:43 -05:00
|
|
|
time factorial_trampoline 60
|