Организовать массив записей, содержащий информацию о результатах сдачи последней сессии вашими товарищами - Lisp
Формулировка задачи:
помогите, пожалуйста!
Организовать массив записей, содержащий информацию о результатах сдачи последней сессии вашими товарищами. Определить и дополнить данные средним баллом.
Решение задачи: «Организовать массив записей, содержащий информацию о результатах сдачи последней сессии вашими товарищами»
textual
Листинг программы
(ns aeon.core)
(def students (atom []))
;; => #'aeon.core/students
(def ^:const subjects
[:accounting
:banking
:management
:marketing
:statistics])
;; => #'aeon.core/subjects
(defrecord Person [fname lname])
;; => aeon.core.Person
(defn session [subjects]
(zipmap subjects
(repeatedly (count subjects)
(partial rand-nth (range 2 6)))))
;; => #'aeon.core/session
(defn add-person [fname lname]
(let [average #(double (/ (apply + %) (count %)))
s (session subjects)
student (-> (->Person fname lname)
(assoc :session s
:average (-> s vals average)))]
(swap! students conj student)))
;; => #'aeon.core/add-person
(doseq [[f l] [["Ivan" "Ivanov"]
["Oleg" "Petrov"]
["Artem" "Smirnov"]
["Sergey" "Popov"]]]
(add-person f l))
;; => nil
(doseq [v @students]
(println v))
;; #aeon.core.Person{:fname Ivan, :lname Ivanov, :session {:accounting 2, :banking 2, :management 4, :marketing 4, :statistics 2}, :average 2.8}
;; #aeon.core.Person{:fname Oleg, :lname Petrov, :session {:accounting 5, :banking 5, :management 5, :marketing 5, :statistics 5}, :average 5.0}
;; #aeon.core.Person{:fname Artem, :lname Smirnov, :session {:accounting 4, :banking 4, :management 4, :marketing 5, :statistics 4}, :average 4.2}
;; #aeon.core.Person{:fname Sergey, :lname Popov, :session {:accounting 5, :banking 3, :management 2, :marketing 4, :statistics 3}, :average 3.4}
;; => nil
Объяснение кода листинга программы
- Создается пространство имен
aeon.core. - Создается атом
students, который будет хранить информацию о студентах. - Создается константный список
subjects, содержащий список предметов. - Определяется тип записи
Person, который представляет собой информацию о студенте, включая его имя и фамилию. - Определяется функция
session, которая принимает список предметов и возвращает ассоциативный массив, где ключами являются предметы, а значениями - случайно сгенерированные числа от 2 до 6. - Определяется функция
add-person, которая принимает имя и фамилию студента, вычисляет средний балл по всем предметам и добавляет информацию о студенте в атомstudents. - Используя
doseq, вызывается функцияadd-personдля каждого элемента списка имен и фамилий. - Используя
doseq, выводится информация о каждом студенте, хранящемся в атомеstudents.