یک vector در Clojure مجموعهای ترتیبی، اندیسدار و تغییرناپذیر از صفر یا بیشتر مقدار است. یعنی وقتی یک vector ساخته شد، دیگر نمیتوان آن را تغییر داد. توابعی که روی vectorها کار میکنند یک vector جدید برمیگردانند، در حالی که vector اصلی بدون تغییر باقی میماند. مقادیر داخل یک vector میتوانند از انواع ناهمگون باشند. vectorها را میتوان به شکل زیر تعریف کرد:
(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])
میتوان با استفاده از یک اندیس، عناصر را از یک vector بازیابی کرد. vectorهای Clojure از صفر شروع میشوند؛ یعنی اندیس اولین عنصر همیشه صفر است:
(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]
vector اصلی بدون تغییر باقی میماند:
numbers
;;=> [2 3 5]
برای به خاطر سپردن مقدار بهروزشده، باید آن را همراه بفرستیم یا در یک var نگه داریم:
(def updated-numbers
(assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9
شما یک پرندهنگر پرشور هستید که پیگیری میکنید در هفت روز گذشته چند پرنده از باغتان بازدید کردهاند.
شش وظیفه دارید که همه به تعداد پرندگانی مربوط میشوند که از باغ شما بازدید کردهاند.
برای مقایسه، همیشه نسخهای از شمارشهای هفتهی گذشته را کنار دستتان نگه میدارید: 0، 2، 5، 3، 7، 8 و 4. یک بردار از شمارشهای هفتهی گذشته بسازید:
last-week
;;=> [0 2 5 3 7 8 4]
تابع today را پیادهسازی کنید تا تعداد پرندگانی را برگرداند که امروز از باغ شما بازدید کردهاند. شمارش پرندهها بر اساس روز مرتب شده است؛ اولین عنصر شمارش قدیمیترین روز و آخرین عنصر شمارش امروز است.
(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1
تابع inc-bird را پیادهسازی کنید تا شمارش امروز را یک واحد افزایش دهد:
(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]
تابع شرطی day-without-birds? را پیادهسازی کنید که اگر روزی وجود داشته باشد که صفر پرنده از باغ بازدید کرده باشد، true را برمیگرداند؛ در غیر این صورت، false را برمیگرداند:
(day-without-birds? birds-per-day)
;;=> true
تابع n-days-count را پیادهسازی کنید که تعداد پرندگانی را برمیگرداند که از ابتدای هفته از باغ شما بازدید کردهاند، اما شمارش را به تعداد روزهای مشخصشده از ابتدای هفته محدود میکند.
(n-days-count birds-per-day 4)
;;=> 14
بعضی روزها شلوغتر از بقیه هستند. روز شلوغ روزی است که پنج پرنده یا بیشتر از باغ شما بازدید کرده باشند.
تابع busy-days را پیادهسازی کنید تا تعداد روزهای شلوغ را برگرداند:
(busy-days birds-per-day)
;;=> 2
در طول یک سال گذشته متوجه شدهاید که بعضی هفتهها الگوی فرد یکسانی دارند، طوری که شمارشها بین یک و صفر پرندهی بازدیدکننده در نوسان است. تابع odd-week? را پیادهسازی کنید که اگر الگوی شمارش پرندههای این هفته با الگوی فرد مطابقت داشته باشد، true را برمیگرداند:
(odd-week? [1 0 1 0 1 0 1])
;;=> true