#1 : Shorthand notations for lambdas

This commit is contained in:
Sławomir Śledź 2019-08-31 01:52:16 +02:00
parent adfe8ec68b
commit c1ae19f270
2 changed files with 21 additions and 4 deletions

View file

@ -66,10 +66,22 @@ lambda() {
} }
map() { map() {
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 local x
while read x; do while read x; do
echo "$x" | "$@" echo "$x" | "$@"
done done
fi
} }
foldl() { foldl() {

View file

@ -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)" 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 . ./shunit2-init.sh