Это может показаться довольно глупым, но как мне получить доступ к элементам в списке?
(nth coll index)
Например:
(nth [1 2 3 4] 2) ; -> 3 (since it uses zero-based indexing)
Есть ли способ создать класс "запись", который бы содержал переменные "имя", "адрес", "номер телефона"? или это невозможно в clojure (и функциональном программировании в целом?) Если у меня не может быть Списка объектов, содержащих эту информацию, как бы я справился с этой задачей?
Это возможно в Clojure, но не в форме. В Clojure основной абстракцией для объектов данных являются карты, а не классы (за исключением некоторых угловых случаев, когда необходимо прямое взаимодействие с платформами Java). Так что вы просто используете карту:
(def entry {:name "x" :address "y" :phone-number "z"})
Чтобы получить доступ к имени предмета, вы можете использовать
(:name entry)
или
(get entry :name)
Первый работает только тогда, когда ключи карты являются ключевыми словами, последний работает со всеми типами ключей.
Итак, для вашего примера ваша модель данных (телефонная книга) будет представлять собой последовательность (скажем, список или вектор) таких карт.
Я думал о том, чтобы иметь функцию, которая считывает вводимые пользователем данные, чтобы узнать, что пользователь хочет сделать (добавить запись, удалить запись или распечатать информацию), а затем вызывает соответствующую функцию, чтобы сделать то, что вызывает первую функцию, когда это сделано. Является ли передача в качестве параметра списка записей каждой функции правильным решением?
Поскольку ваша модель состоит только из одной основной структуры данных (телефонная книга seq), передача ее в качестве аргумента, безусловно, является подходящим способом для разработки ваших функций. Если вы ожидаете, что у вас будет больше видов контейнеров верхнего уровня (например, для более реальных приложений), я бы рекомендовал изучить шаблон контекста приложения , который на первый взгляд будет выглядеть немного пугающим (по крайней мере, это было для меня, и оно содержит много специфичного для Clojure жаргона), но оно того стоит, чтобы выучить.