#1 : Shorthand notations for lambdas
This commit is contained in:
parent
adfe8ec68b
commit
c1ae19f270
2 changed files with 21 additions and 4 deletions
20
src/fun.sh
20
src/fun.sh
|
@ -66,10 +66,22 @@ lambda() {
|
|||
}
|
||||
|
||||
map() {
|
||||
local x
|
||||
while read x; do
|
||||
echo "$x" | "$@"
|
||||
done
|
||||
if [[ $1 != "λ" ]] && [[ $1 != "lambda" ]]; then
|
||||
|
||||
local has_dollar=$(list $@ | grep '\$' | wc -l)
|
||||
|
||||
if [[ $has_dollar -ne 0 ]]; then
|
||||
args=$(echo $@ | sed -e 's/\$/\$a/g')
|
||||
map λ a . $args
|
||||
else
|
||||
map λ a . "$@"' $a'
|
||||
fi
|
||||
else
|
||||
local x
|
||||
while read x; do
|
||||
echo "$x" | "$@"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
foldl() {
|
||||
|
|
|
@ -30,4 +30,9 @@ testFlatMap() {
|
|||
assertEquals "d e h l l l o o r w" "$(list hello world | map lambda x . 'command fold -w 1 <<< $x' | sort | unlist)"
|
||||
}
|
||||
|
||||
testMapNoLambdaSyntax() {
|
||||
assertEquals "1 2 3" "$(list 1 2 3 | map echo | unlist)"
|
||||
assertEquals "1 is a number 2 is a number 3 is a number" "$(list 1 2 3 | map 'echo $ is a number' | unlist)"
|
||||
}
|
||||
|
||||
. ./shunit2-init.sh
|
Loading…
Reference in a new issue