كلوجر
![]() |
| لغة كلوجر |
لغة كلوجر من اللغات الدالية تم اختيارها فى برامج الذكاء الاصطناعي
هي لغة دالية (Functional) و هو توجه أكاديمي حتى وقت قريب حيث أن التوجه الذي يحكم السوق هو توجه اللغات كائنية التوجه(Object Oriented) مثل جافا و C#. - تواجدت بعض
اللغات الدالية
منذ وقت طويل مثل Haskell و اللغة القديمة قدم C و هي Lisp و لكن لم يكتب لهم النجاح في عالم الشركات حتى وقت قريب بالرغم من تميز هذه اللغات. - في الوقت الحالي بدأت اللغات الدالية بالعودة للساحة من جديد في صورة أو أخرى مثل Scala, F#, Clojure, Haskell, scheme, python, ruby مع الاعتراف بأن بعض هذه اللغات يملك قابلية الكتابة بمنهجي الدالية و كائنية التوجه. - حتى أن اللغات العتيدة في مسألة كائنية التوجه أضيف لها بعض من خصائص اللغات الدالية مثل ما حدث مع C# 4 و ما سيحدث مع Java 7 and 8.
- Clojure هي نكهة من نكهات Lisp و Lisp
هي لغة قديمة قوية جميلة لكنها أبداً لم تصبح توجه عام بالنسبة للمبرمجين رغم أنها الاختيار الأول لكتابة برامج الذكاء الاصطناعي و من المبادئ البسيطة ل Lisp و التي ورثتها Clojure عنها هي أن شفرة البرنامج نفسها تعتبر معلومات "Code as Data" و لذلك تحاط جميع أكواد Clojure بأقواس لأن كل جملة من أكواد Clojure تعتبر List.
سنفترض معرفتك بجافا .. إذن أنت معتاد على كود بهذا الشكل:
myObj.doSomething(anArg);
مع Clojure نفس الكود سيكتب بهذا الشكل:
(do-something my-obj an-arg)
و هذا يدعى prefix notation. - كما تلاحظ فإن الكود محاط بأقواس (و هذا ربما العيب الوحيد الذي يؤخذ على Clojure و من قبلها Lisp لكثرة الأقواس الناتجة من الكتابة). - مثال آخر على ال prefix notation:
(+ 2 3)
- نلاحظ أن علامة الجمع في بداية الدالة لأنها هي نفسها الدالة و
الرقمين بعدها هما معطيات الدالة. ما الذي ستحصل عليه مع
Clojure:
- closures - List comprehension - Software Transactional Memory - Lazy sequence - Code as Data - Immutable data structures - Dynamicity - Macros
أنواع البيانات في Clojure:
- Arbitrary precision integers - 12345678987654 - Doubles 1.234 , BigDecimals 1.234M - Ratios - 22/7 - Strings - “fred” , Characters - \a \b \c - Symbols - fred ethel , Keywords - :fred :ethel - Booleans - true false , Null – nil - Regex patterns #”a*b”
هيكلة البيانات في
• Lists - singly linked, grow at front (1 2 3 4 5), (fred ethel lucy), (list 1 2 3) • Vectors - indexed access, grow at end [1 2 3 4 5], [fred ethel lucy] • Maps - key/value associations {:a 1, :b 2, :c 3}, {1 “ethel” 2 “fred”} • Sets #{fred ethel lucy} • Everything Nests
مثال للكود و شكله:
هذا الكود لعمل نافذة بمساحة 300*300 بيكسل مع زر و مربع نص و عنوان.
(import '(javax.swing JFrame JPanel JLabel JButton JTextArea)) (doto (JFrame. "Test") (.setContentPane (doto (JPanel.) (.setSize 300 300) (.add (JLabel. "Label 1")) (.add (JTextArea. )) (.add (



ليست هناك تعليقات:
إرسال تعليق