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.