**Clojure** (გამოითქმის როგორც "closure") არის ლისპისნაირი პროგრამირების ენის თანამედროვე დიალექტი, შექმნილია რიჩ ჰიკეის მიერ. იგი არის საერთო დანიშნულების პროგრამირების ენა, ინტერაქტიული პროგრამირების მხარდაჭერით, უბიძგებს ფუნქციური პროგრამირება სტილის გამოყენებას, და აადვილებს მრავალსრედიან პროგრამირებას.

Clojure-ი ფუნქციონირენს Java Virtual Machine-ზე, Common Language Runtime-ზე და აგრეთვე შესაძლოა მისი ჯავასკრიპტში გადაყვანა. როგორც სხვა ლისპისნაირი ენები, Clojure-ი ამუშავებს კოდს მონაცემებისნაირად და აქვს ძლიერი მაკრო სისტემა.

ისტორია
-------

რიჩ ჰიკეი არის Clojure პროგრამირების ენის შემქნელი. Clojure-ამდე მან შექმნა dotLisp-ი, მსგავსი პროექტი რომელიც იყენებდა .NET პლატფორმას. ჰიკეი არის პირადი პროგრამისტი და კონსულტანტი 20 წლის გამოცდილობით. Clojure-ის შექმნას მოანდომა 2½ წელი, მან ეს სპონსორის გარეშე გააკეთა. როცა მზად იყო, თავისი ნაშრომი მის Common Lisp საზოგადოების ამხანაგებს ელ.წერილით გააცნო.

ფილოსოფია
---------

ჰიკეიმ Clojure იმიტომ შექმნა რომ მას უნდოდა თანამედროვე ლისპი რომელსაც ექნებოდა ჯავას პლატფორმის მხარდაჭერა, და შექმნილია თანადროული შესრულებისთვის.

სინტაქსი
--------

როგორც სხვა ლისპის ტიპურ ენებში, Clojure-ის სინტაქსი არის დაყრდნობილი S-expression-ებზე რომლებიც არიან სინტატიკურად ანალიზირებულნი მონაცემთა სტრუქტურებში სანამ იგი კომპილირებული იქნება. Clojure-ი არის lisp-1, და მისი მიზანი არ არის რომ წყარო კოდი შეთავსებადი იყოს სხვა ლისპ დიალექტებთან.

მაგალითები
----------

Hello world:

```
(println "Hello, world!")

```

ფუნქციის გამოცხადება:

```
(defn square [x]
 (\* x x))

```

Hello World-ი გრაფიკული ინტერფეისით Java Swing ბიბლიოთეკის მეშვეობით:

```
(javax.swing.JOptionPane/showMessageDialog nil "Hello World" )

```

დაცული სრედიანი სერიული ნომრების შემქნელი (სხვა ლისპის დიალექტების მსგავსად, Clojure-ს მოყვება `gensym` ფუნქცია ამისთვის):

```
(let [i (atom 0)]
 (defn generate-unique-id
 "Returns a distinct numeric ID for each call."
 []
 (swap! i inc)))

```

ანონიმური `java.io.Writer`-ს ქვეკლასი რომელიც არაფერს არ წერს, და მაკრო რომელიც საბეჭდავ ფუნქციას "უჩინაჩარს" ხდის :

```
(def bit-bucket-writer
 (proxy [java.io.Writer] []
 (write [buf] nil)
 (close [] nil)
 (flush [] nil)))

(defmacro noprint
 "Evaluates the given expressions with all printing to \*out\* silenced."
 [& forms]
 `(binding [\*out\* bit-bucket-writer]
 ~@forms))

(noprint
 (println "Hello, nobody!"))

```

სქოლიო
------

1. ↑
2. ↑
3. ↑
4. ↑

რესურსები ინტერნეტში
--------------------

* ვიკიწიგნების ლოგო **ვიკიწიგნებში** არის სტატია: ***Clojure***
* (ინგლისური) Official website
* (ინგლისური) GitHub code repository for Clojure
* (ინგლისური) A comprehensive overview of Clojure დაარქივებული 2011-06-28 საიტზე Wayback Machine.
* (ინგლისური) An overview of Clojure 1.2 in reference format დაარქივებული 2017-04-28 საიტზე Wayback Machine.
* (ინგლისური) Full Disclojure - Screencast
* (ინგლისური) Clojure talks on Blip.tv დაარქივებული 2010-03-16 საიტზე Wayback Machine.
* (ინგლისური) clojuredocs.org - Community-powered documentation and examples
* (ინგლისური) 4clojure.com - Interactive Clojure Problems დაარქივებული 2011-04-24 საიტზე Wayback Machine.
* (ინგლისური) TryClojure - An online REPL for Clojure

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| ხ • გ • რ
პროგრამირების ენები |
| --- |
|  |
|  ობიექტზე-ორიენტირებული | 
* გრუვი
* D
* ეიფელი
* პითონი
* რუბი
* Objective-C
* C++
* C#
* ჯავა
* ჯავასკრიპტი
 |
|  |
|  ბრძანებითი | 
* ასემბლერი
* კობოლი
* ლუა
* პერლი
* PHP
* C
 |
|  |
|  ფუნქციური | 
* ობიექტური კამლი
* Clojure
* F#
* Standard ML
 |
|  |
|  თანადროული | 
* ადა
* ერლანგი
 |

 |