Clojure/სიები

ვიკიწიგნებიდან

ატომები შეიძლება დაჯგუფდეს სიებში. სიები შეიძლება იყოს ცარიელი ან შედგებოდეს რამდენიმე ატომისაგან, რომლებიც მოქცეულია ფრჩხილებში. სიის ელემენტები გამიჯნულია ცარიელი სიმბოლოთი (შესაძლებელია აგრეთვე მძიმით გამიჯვნაც). სიები შეიძლება გამოვიყენოთ მოქმედების შესასრულებლად, მაგალითად ასეთის:

user=> (+ 3 3 3)
9

ამ ოპერაციით ხდება სამი რიცხვის შეჯამება. როდესაც Clojure აფასებს სიებს, სიის პირველი ელემენტი, რომელსაც ოპერატორს უწოდებენ, განსაზღვრავს შესასრულებელი ოპერაციის ტიპს. დანარჩენ ელემენტებს ეწოდებათ არგუმენტები.

სია, რომელიც ასრულებს მოქმედებას ცნობილი ოპერატორით არის ფორმა. სულ სამი სახის ფორმა არსებობს: ფუნქციები, მაკროსები და სპეციალური ფორმები.

სიის ელემენტები შეიძლება იყოს ატომები, სიები ან სხვა მონაცემთა სტრუქტურები რომლებიც შედიან Clojure-ში.

user=> (list :foo (list 1 2 3) [4 5 6])
(:foo (1 2 3) [4 5 6])

თუმცა სია მოქმედების შესასრულებლად გამოიყენება, იგივე სინტაქსის გამოყენებით შეიძლება აგრეთვე მონაცემის წარმოდგენაც. არსებითი შედეგი იმისა, რომ კოდი და მონაცემი ერთი სინტაქსით განისაზღვრება არის შემდეგი დებულება: კოდზე შეგვიძლია იმდაგვარად ვიმოქმედოთ, როგორც მონაცემზე, რადგან კოდი -- მონაცემია.

მონაცემთა სიის შესაქმენლად, გამოიყენეთ Clojure-ს ჩადგმული ოპერატორი, list:

user=> (list 1 2 3)
(1 2 3)

user=> (list a b c)
(a b c)

user=> (list "one" "two" "three")
("one" "two" "three")

Clojure-ს აგრეთვე აქვს უფრო მოკლე სინტაქსი მონაცემთა სიითვის. ამისათვის საკმარისია სიის წინ დაისვას ერთმაგი ბრჭყალი:

user=> '(1 2 3)
(1 2 3)

თუმცა ამ ხერხით სიის შექმნას აქვს მცირედით განსხვავებული ეფექტი. სიის ყოველი ელემენტები შეუფასებელი რჩება.

Clojure-ს ჩადგმული ოპერატორების დახმარებით შესაძლებელია მონაცემიდან მივიღოთ ინფორმაცია. შემდეგი გამოსახულება აბრუნებს მოცემული სიის პირველ ელემენტს.

user=> (first '("one" "two" "three"))
"one"

შემდეგი ოპერაცია კი აბრუნებს ყველა ელემენტს გარდა პირველისა:

user=> (rest '("one" "two" "three"))
("two" "three")