Ответ 1
В этом случае вы хотите отобразить функцию над коллекцией (которая просто является вектором); для каждого элемента в коллекции (который, случается, представляет собой карту - неудачное столкновение имен), вы хотите создать новую карту, в которой есть все пары ключевого значения старой карты, плюс новый ключ, скажем: avg.
например.
(into [] ; optional -- places the answer into another vector
(map ; apply the given function to every element in the collection
(fn [sg] ; the function takes a student-grade
(assoc sg ; and with this student-grade, creates a new mapping
:avg ; with an added key called :avg
(/ (+ (:test1 sg) (:test2 sg) (:test3 sg)) 3.0)))
student-grades ; and the function is applied to your student-grades vector
))
ps вы можете использовать (doc fn-name) для получения документации по нему; если вы новичок в Clojure, я бы посоветовал пообщаться с дружелюбными людьми на irc.freenode.net # clojure и прочитать книгу - мой любимый в настоящее время Программирование Clojure, но я жду предстоящую книгу O'Reilly Clojure с замиранием сердца.