Clojure: განსხვავება გადახედვებს შორის
[შეუმოწმებელი ვერსია] | [შეუმოწმებელი ვერსია] |
No edit summary |
No edit summary |
||
ხაზი 44: | ხაზი 44: | ||
}} |
}} |
||
'''Clojure''' (გამოითქმის როგორც "კლოზურ"<ref>http://groups.google.com/group/clojure/msg/766b75baa7987850</ref>) არის [[ლისპი|ლისპისნაირი]] [[პროგრამირების |
'''Clojure''' (გამოითქმის როგორც "კლოზურ"<ref>http://groups.google.com/group/clojure/msg/766b75baa7987850</ref>) არის [[ლისპი|ლისპისნაირი]] [[პროგრამირების ენა|პროგრამირების ენის]] თანამედროვე დიალექტი, შექმნილია რიჩ ჰიკეის მიერ. იგი არის საერთო დანიშნულების პროგრამირების ენა, ინტერაქტიული პროგრამირების მხარდაჭერით, უბიძგებს [[ფუნქციური პროგრამირების|ფუნქციური პროგრამირება]] სტილის გამოყენებას, და აადვილებს [[სრედი (საინფორმაციო მეცნიერება)|მრავალსრედიან]] პროგრამირებას. |
||
Clojure-ი ფუნქციონირენს [[Java Virtual Machine|Java Virtual Machine-ზე]], [[Common Language Runtime|Common Language Runtime-ზე]] და აგრეთვე შესაძლოა მისი [[ჯავასკრიპტი|ჯავასკრიპტში]] გადაყვანა. როგორც სხვა ლისპისნაირი ენები, Clojure-ი ამუშავებს კოდს მონაცემებისნაირად და აქვს ძლიერი [[მაკრო (საინფორმაციო მეცნიერება)|მაკრო]] სისტემა. |
Clojure-ი ფუნქციონირენს [[Java Virtual Machine|Java Virtual Machine-ზე]], [[Common Language Runtime|Common Language Runtime-ზე]] და აგრეთვე შესაძლოა მისი [[ჯავასკრიპტი|ჯავასკრიპტში]] გადაყვანა. როგორც სხვა ლისპისნაირი ენები, Clojure-ი ამუშავებს კოდს მონაცემებისნაირად და აქვს ძლიერი [[მაკრო (საინფორმაციო მეცნიერება)|მაკრო]] სისტემა. |
||
ხაზი 58: | ხაზი 58: | ||
== სინტაქსი == |
== სინტაქსი == |
||
როგორც სხვა [[ |
როგორც სხვა [[ლისპი|ლისპის]] ტიპიურ [[პროგრამირების ენა|ენებში]], Clojure-ის სინტაქსი არის დაყრდნობილი [[S-expression|S-expression-ებზე]] რომლებიც არიან სინტატიკურად ანალიზირებულნი [[მონაცემთა სტრუქტურა|მონაცემთა სტრუქტურებში]] სანამ იგი [[კომპილირება|კომპილირებული]] იქნება. Clojure-ი არის [[lisp-1]], და მისი მიზანი არ არის რომ წყარო კოდი შეთავსებადი იყოს სხვა ლისპ დიალექტებთან. |
||
== მაგალითები == |
|||
[[Hello world]]: |
|||
<source lang="lisp"> |
|||
(println "Hello, world!") |
|||
</source> |
|||
ფუნქციის გამოცხადება: |
|||
<source lang="lisp"> |
|||
(defn square [x] |
|||
(* x x)) |
|||
</source> |
|||
Hello World-ი გრაფიკული ინტერფეისით Java Swing ბიბლიოთეკის მეშვეობით: |
|||
<source lang="lisp"> |
|||
(javax.swing.JOptionPane/showMessageDialog nil "Hello World" ) |
|||
</source> |
|||
დაცული [[სრედი|სრედიანი]] სერიული ნომბრების შემქნელი (სხვა [[ლისპი|ლისპის]] დიალექტებთან განსხვავებით, Clojure-ს მოყვება <code>gensym</code> ფუნქცია ამისთვის): |
|||
<source lang="lisp"> |
|||
(let [i (atom 0)] |
|||
(defn generate-unique-id |
|||
"Returns a distinct numeric ID for each call." |
|||
[] |
|||
(swap! i inc))) |
|||
</source> |
|||
ანონიმური <code>[http://java.sun.com/javase/6/docs/api/java/io/Writer.html java.io.Writer]</code>-ს [[ქვეკლასი]] რომელიც არაფერს არ წერლს, და [[მაკრო (საინფორმაციო მეცნიერება)|მაკრო]] რომელიც საბეჭდავ ფუნქციას "უჩინაჩარს" ხდის : |
|||
<source lang="lisp"> |
|||
(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!")) |
|||
</source> |
|||
== სქოლიო == |
== სქოლიო == |
18:36, 22 დეკემბერი 2011-ის ვერსია
ამ სტატიას ან სექციას ვიკიფიცირება სჭირდება ქართული ვიკიპედიის ხარისხის სტანდარტების დასაკმაყოფილებლად. იმ შემთხვევაში, თუ არ იცით, თუ რა არის ვიკიფიცირება, იხ. დახმარების გვერდი. სასურველია ამის შესახებ აცნობოთ იმ მომხმარებლებსაც, რომელთაც მნიშვნელოვანი წვლილი მიუძღვით სტატიის შექმნაში. გამოიყენეთ: {{subst:ვიკიფიცირება/info|Clojure}} |
Clojure | |
პარადიგმა | ფუნქციური, მრავალპარადიგმული |
---|---|
გამოქვეყნების თარიღი | 2007 |
შემქნელი | რიჩ ჰიკეი |
სტაბილური ვერსია | 1.3 (23/09/2011) |
ბოლო ვერსია | 3.1 |
ტიპის მინიჭების დისციპლინა | ძლიერი, დინამიური |
ენების ზეგავლენით | ქომონ ლისპი, სქემე, პროლოგი, ML, ჰასკელი, ერლანგი[1] |
პლატფორმა | JVM, CLR |
ლიცენზია | Eclipse Public License |
ვებ-გვერდი | http://clojure.org |
Clojure (გამოითქმის როგორც "კლოზურ"[2]) არის ლისპისნაირი პროგრამირების ენის თანამედროვე დიალექტი, შექმნილია რიჩ ჰიკეის მიერ. იგი არის საერთო დანიშნულების პროგრამირების ენა, ინტერაქტიული პროგრამირების მხარდაჭერით, უბიძგებს ფუნქციური პროგრამირება სტილის გამოყენებას, და აადვილებს მრავალსრედიან პროგრამირებას.
Clojure-ი ფუნქციონირენს Java Virtual Machine-ზე, Common Language Runtime-ზე და აგრეთვე შესაძლოა მისი ჯავასკრიპტში გადაყვანა. როგორც სხვა ლისპისნაირი ენები, Clojure-ი ამუშავებს კოდს მონაცემებისნაირად და აქვს ძლიერი მაკრო სისტემა.
ისტორია
რიჩ ჰიკეი არის Clojure პროგრამირების ენის შემქნელი. Clojure-ამდე მან შექმნა dotLisp-ი, მსგავსი პროექტი რომელიც იყენებდა .NET პლატფორმას. ჰიკეი არის პირადი პროგრამისტი და კონსულტანტი 20 წლის გამოცდილობით. Clojure-ის შექმნას მოანდომა 2½ წელი, მან ეს სპონსორის გარეშე გააკეთა. როცა მზად იყო, თავისი ნაშრომი მის Common Lisp საზოგადოების ამხანაგებს ელ.წერილით გააცნო.
ფილოსოფია
ჰიკეიმ Clojure იმიტომ შექმნა რომ მას უნდოდა თანამედროვე ლისპი რომელსაც ექნებოდა ჯავას პლატფორმის მხარდაჭერა, და შექმნილია თანადროული შესრულებისთვის.[3][4]
სინტაქსი
როგორც სხვა ლისპის ტიპიურ ენებში, Clojure-ის სინტაქსი არის დაყრდნობილი S-expression-ებზე რომლებიც არიან სინტატიკურად ანალიზირებულნი მონაცემთა სტრუქტურებში სანამ იგი კომპილირებული იქნება. Clojure-ი არის lisp-1, და მისი მიზანი არ არის რომ წყარო კოდი შეთავსებადი იყოს სხვა ლისპ დიალექტებთან.
მაგალითები
(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!"))
სქოლიო
რესურსები ინტერნეტში
- (ინგლისური) Official website
- (ინგლისური) GitHub code repository for Clojure
- (ინგლისური) A comprehensive overview of Clojure
- (ინგლისური) An overview of Clojure 1.2 in reference format
- (ინგლისური) Full Disclojure - Screencast
- (ინგლისური) Clojure talks on Blip.tv
- (ინგლისური) clojuredocs.org - Community-powered documentation and examples
- (ინგლისური) 4clojure.com - Interactive Clojure Problems
- (ინგლისური) TryClojure - An online REPL for Clojure
|