في Clojure، يُشار إلى ربط قيمة باسم ما بمصطلح متغير. والمتغيرات العلوية (العامة) تشبه الثوابت في لغات أخرى.
تُعرَّف المتغيرات العلوية باستخدام def:
(def fingers 10)
fingers
;;=> 10
يمكنك استخدام defn لتعريف دالة تأخذ صفرًا من الوسائط أو أكثر. وهذه دالة تجمع عددين معًا:
(defn add [x y]
(+ x y))
تأخذ هذه الدالة وسيطين يوضعان في المتجه [x y]، ويليهما جسم الدالة الذي يمكن أن يحتوي على أي عدد من التعبيرات. وقيمة الإرجاع هي دائمًا نتيجة تقييم آخر تعبير في الجسم، (+ x y). وهذا التعبير قائمة تمثل استدعاء دالة. وأول عنصر في القائمة هو دالة + التي تُقيَّم باستخدام العنصرين التاليين x و y كوسائط.
وتُستدعى الدالة add المعرَّفة أعلاه على النحو نفسه:
(add 2 3)
;;=> 5
لا يمكن استخدام الدوال والقيم في Clojure إلا بعد تعريفها، أي أن الصيغ تُقيَّم دائمًا بالترتيب الذي تظهر به.
في Clojure، لا معنى للمسافات البيضاء إلا من ناحية التنسيق.
تُنظَّم دوال Clojure ومتغيراتها في فضاءات أسماء. وفضاء الأسماء يجمع الوظائف المترابطة، ويُعرَّف باستخدام ماكرو ns:
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
يدعم Clojure نوعين من التعليقات. التعليقات أحادية السطر تسبقها علامة ;، وتُستخدم صيغة comment لمنع تقييم كل ما يقع بين (comment و ).
في هذا التمرين ستكتب بعض الكود لمساعدتك في طهي لازانيا رائعة من كتاب الطهي المفضل لديك.
لديك أربع مهام، وكلها متعلقة بالوقت المستغرق في طهي اللازانيا.
عرّف المتغير expected-time للتحقق من عدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. وفقًا لكتاب الطهي، فإن زمن الفرن المتوقع بالدقائق هو 40:
expected-time
;;=> 40
عرّف الدالة remaining-time التي تأخذ الدقائق الفعلية التي قضتها اللازانيا في الفرن كوسيط، وتُرجع عدد الدقائق التي ما زال يتعين على اللازانيا أن تبقى فيها في الفرن، بناءً على زمن الفرن المتوقع بالدقائق من المهمة السابقة.
(remaining-time 30)
;;=> 10
عرّف الدالة prep-time التي تأخذ عدد الطبقات التي أضفتها إلى اللازانيا كوسيط، وتُرجع عدد الدقائق التي استغرقتها في تحضير اللازانيا، بافتراض أن كل طبقة تستغرق منك 2 دقائق لتحضيرها.
(prep-time 2)
;;=> 4
عرّف الدالة total-time التي تأخذ وسيطين: الوسيط الأول هو عدد الطبقات التي أضفتها إلى اللازانيا، والوسيط الثاني هو عدد الدقائق التي قضتها اللازانيا في الفرن. ينبغي أن تُرجع الدالة إجمالي عدد الدقائق التي عملتها في طهي اللازانيا، وهو مجموع زمن التحضير بالدقائق، والوقت بالدقائق الذي قضته اللازانيا في الفرن في هذه اللحظة.
(total-time 3 20)
;;=> 26
سجّل في Exercism لتتعلّم وتتقن Clojure عبر 12 مفهومًا105 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.