func mapF(filename string, contents string) []mapreduce.KeyValue {
	words := strings.FieldsFunc(contents, func(r rune) bool {
		return !unicode.IsLetter(r)
	})
	res := make([]mapreduce.KeyValue, 0)
	for _, word := range words {
		res = append(res, mapreduce.KeyValue{word, ""})
	}
	return res
}
The map function is called once for each file of input. The first
argument is the name of the input file, and the second is the
file's complete contents. You should ignore the input file name,
and look only at the contents argument. The return value is a slice
of key/value pairs.
package main
import (
	"fmt"
	"mapreduce"
	"os"
	"strings"
	"unicode"
	"strconv"
)