mpmap procedure-expr
Reads s-expressions from standard input, and applies the procedure
expression procedure-expr to each of them. The results are then
written to standard output. The procedure expression may return an
arbitrary number of values; all non-undefined values are output in
order (separated by a single space), and a newline is written after
the values from each application of the procedure expression. It is
legal for the procedure expression to return zero values.
Examples
Basic operation
$ echo '"Alaric" "was" "here"' | mpmap string-reverse
"ciralA"
"saw"
"ereh"
Returning multiple values
$ echo "1 2 3" | mpmap '(lambda (x) (values x (+ x 1)))'
1 2
2 3
3 4
Note how the two values returned for each input s-expr are output on
the same line, for clarity.
Defining utilities with -d
$ echo "1 2 3" | mpmap -d '(define (foo x) (values x (+ x 1)))' 'foo'
1 2
2 3
3 4
Using procedures from Chicken modules
$ echo "1 2 3" | mpmap -u srfi-4 'make-u8vector'
#u8(112)
#u8(74 61)
#u8(136 51 131)
Omitting undefined values
$ echo "#t #f #t" | mpmap '(lambda (x) (values x (if x "Yes" (void)) x))'
#t "Yes" #t
#f #f
#t "Yes" #t
Omitting entire inputs
$ echo "1 2 3 4 5 6" | mpmap '(lambda (x) (if (even? x) x (values)))'
2
4
6
When we produce zero values with values, only a blank line is
output.