CALM/arwiki huggingface dataset:
متغير بسيط (literal) هو المتغير البولياني أو ضده اي اما ان يكون formula_47 أو formula_48. بشكل عام الترميز التالي شائع الاستخدام: formula_49 و- formula_50 لذا فانه لكل سلسلة formula_51 يتحقق التالي:
احادي الحدود (monomial) هو AND متغيرات بسيطة، والتعبير (clause) هو or متغيرات بسيطة. مثال:
DNF هو OR آحاد الحدود و- CNF هو AND تعابير. كل دالة بوليانية (f(x يمكن التعبير عنها بواسطة (DNF D(x أو (CNF C(x :
ثنائي الدالة البوليانية.
لكل دالة بوليانية يمكن تعريف دالة بوليانية اخرى formula_56 وتسمى هذه الدالة ثنائي f . وهي كالتالي:
لهذه الدالة عدة تطبيقات بشكل طبيعي منها في نظرية التصويت (voting theory) .
لهذه الدالة كثير من الخصال منها:
لنفرض أن f,g هما دالتين بوليانيتين حينها:
الدوال البوليانية على انها نظام مجموعات.
لكل مجموعة جزئية S من المجموعة formula_63 نعرف دالة التشخيص (Characteristic function) formula_64 والتي تحقق:
حينها يمكن تعريف الدالة البوليانية على انها علاقة (predicate) formula_66 . ويستطيع المرئ ان ينظر إلى دالة بوليانية formula_67 على انها عائلة المجموعات الجزئية التالية: formula_68 .
دوال بوليانية احادية التوجه.
لكل مُتجهين formula_69 نكتب formula_70 إذا formula_71 . دالة بوليانية احادية التوجه إذا formula_72 . لو نظرنا ل- f على انها علاقة اي formula_66 حينها الدالة f احادية الاتجاه إذا وفقط إذا formula_74 حينها لكل formula_75 يتحقق formula_76 .
امثلة لدوال احادية الاتجاه هي AND OR , دالة الحفة formula_77 ...
كلوچر هي لهجة حديثة من ليسب لغة برمجة. وهي لغة عامة الهدف تدعم التطور التفاعلي الذي يُشجع أسلوب برمجة وظيفية ويُبسّط برمجة خيط (حاسوب)
تعمل لغة كلوچر علي آلة جافا الافتراضية ووقت تشغيل اللغة المشترك. ومثل لغات ليسب فإن لغة كلوچر تعتبر الشفيرات كبيانات ولها نظام ماكرو معقد.
وضع (ريتش هيكي) لغة كلوچر لأنه أراد لغة ليسب حديثة للـ برمجة وظيفية تتوافق مع جافا (منصة برمجية) وتم تصميمها لتحقيق التزامن.
يتسم أسلوب لغة كلوچر في تحقيق التزامن بمفهوم الهويات, الذي يُمثل سلسلة من الحالات الثابتة مع مرور الوقت. وبما أن الحالات قيم ثابتة لا تتغير فيمكن أن يعمل عليها أي عدد من العاملين في نفس الوقت ويُصبح التزامن مسألة إدارة التغيرات من حالة إلي أخرى. لهذا الغرض تتيح لغة كلوچر العديد من أنواع المراجع المتغيرة لكل منها معاني محددة جيدا للانتقال بين الحالات.
مثل غيرها من لغات ليسب فإن بنية اللغة كلوچر قائمة علي اللغات الرمزية S-expressions التي يتم تحليلها أولا إلي هياكل بيانات بواسطة قارئ قبل تجميعها. يدعم قارئ لغة كلوچر البنية النصية للخرائط والمجموعات والمتجهات بالإضافة إلي القوائم. ثم يتم إعطاء كل ذلك إلي المُجمع كما هي. بمعني آخر لا يقوم جامع لغة كلوچر بجمع هياكل البيانات فقط ولكنه يدعم كل الأنواع المذكورة مباشرة. لغة كلوچر هي لغة ليسب-1 وليس المقصود منها أن تتوافق من ناحية الشفرة مع لهجات ليسب الأخرى.
الماكرو.
ماكرو لغة كلوچر يشبه كثيرا الماكرو الخاص بلغة ليسب العادية ماعدا أن في لغة كلوچر فإن الفاصلة العليا المائلة (التي تسمي الفاصلة البنائية تصف الرموز بحيزها الاسمي. يساعد ذلك علي منع إتخاذ الأسماء غير المقصودة كارتباط بالأسماء المؤهل حيزها الاسمي. من الممكن إجبار حصر بيانات امتداد الماكرو ولكن يجب أن يتم ذلك بوضوح. كما أن لغة كلوچر لا تسمح بإعادة ارتباط الأسماء العالمية في حيز اسمي آخر تم استيراد بياناته إلي الحيز الاسمي الحالي.
برنامج_أهلا_بالعالم:
(println "Hello, world!")
مولد خيط آمن من أعداد متسلسلة فريدة:
(javax.swing.JOptionPane/showMessageDialog nil "Hello World")
فئة فرعية مجهولة من كاتي جافا آى أو والتي لا تكتب علي أي شيء والماكرو يستخدم ذلك لإسكات كافة المطبوعات بداخله:
(let [i (atom 0)]
(defn generate-unique-id
"Returns a distinct numeric ID for each call."
(swap! i inc)))
فئة فرعية مجهولة من codice_1 that والتي لا تكتب علي أي شيء والماكرو يستخدم ذلك لإسكات كافة المطبوعات بداخله:
(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."
[&amp; forms]
`(binding [*out* bit-bucket-writer]
~@forms))
(noprint
(println "Hello, nobody!"))
10 خيوط تستخدم هيكل بيانات مشترك واحد يتكون من 100 متجه يحتوي كل منها عي 10 أعداد فريدة (متتابعة أولياً). يتكرر اختيار كل خيط لموضعين عشوائيين في متجهين عشوائيين ويقوم بتبديلهما. كافة التغييرات علي المتجهات تحدث في التعاملات عن طريق الاستفادة من نظام ذاكرة أعمال البرمجيات الخصة بلغة كلوچر، ولهذا السبب فإنه حتي بعد 100.000 تكرار لكل خيط، لا يضيع أي حرف.
(defn run [nvecs nitems nthreads niters]
(let [vec-refs (vec (map (comp ref vec)
(partition nitems (range (* nvecs nitems)))))
swap #(let [v1 (rand-int nvecs)
v2 (rand-int nvecs)
i1 (rand-int nitems)
i2 (rand-int nitems)]
(dosync
(let [temp (nth @(vec-refs v1) i1)]
(alter (vec-refs v1) assoc i1 (nth @(vec-refs v2) i2))
(alter (vec-refs v2) assoc i2 temp))))
report #(do
(prn (map deref vec-refs))
(println "Distinct:"
(count (distinct (apply concat (map deref vec-refs))))))]
(report)
(dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap)))))
(report)))
(run 100 10 10 100000)
مخرجات المثال السابق:
([0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]...
[990 991 992 993 994 995 996 997 998 999])
Distinct: 1000
([382 318 466 963 619 22 21 273 45 596] [808 639 804 471 394 904 952 75 289 778]...
[484 216 622 139 651 592 379 228 242 355])
إدارة التهيئة هي إحدى مجالات الإدارة التي تركز على إنشاء والمحافظة على الاتساق في الأداء والسمات الوظيفية والمادية لنظام أو منتج معين مع المتطلبات والتصميم والمعلومات الخاصة به خلال فترة عمره الافتراضي.
ومن منظور أمن المعلومات، يمكن تعريف إدارة التهيئة على أنها إدارة الخصائص والضمانات الأمنية من خلال التحكم في التغيرات التي تطرأ على الأجهزة والبرمجيات والبرامج الثابتة والتوثيق والاختبار وتجهيزات الاختبار ووثائق الاختبار طوال فترة عمر نظام المعلومات. وتعتمد إدارة التهيئة لأمن المعلومات، التي يشار إليها أحيانًا باسم إدارة التهيئة الآمنة، على سمات الأداء والسمات الوظيفية والمادية لأنظمة ومنتجات تكنولوجيا المعلومات وبيئاتها لتحديد الخصائص والضمانات الأمنية المناسبة التي تُستخدم في قياس حالة تهيئة النظام.
على سبيل المثال، قد تختلف متطلبات التهيئة بالنسبة لجدار حماية الشبكة الذي يعمل كجزءٍ من حدود الإنترنت لمؤسسة معينة في مقابل ذلك الذي بعمل كجدار حماية لشبكة محلية داخلية.
تم تطوير إدارة التهيئة لأول مرة في خمسينيات القرن الماضي بواسطة القوات الجوية الأمريكية لصالح وزارة الدفاع كنظام إدارة فنية للأجهزة. وقد تم اعتماد مفاهيم هذا النظام على نطاق واسع لدى العديد من وظائف الإدارة الفنية، بما في ذلك هندسة النظم والدعم اللوجستي المتكامل ونموذج نضج القدرات المتكامل والأيزو 9000 ومنهجية إدارة مشروع برنس2 وأهداف التحكم للمعلومات والتكنولوجيا ذات الصلة (الكوبيت) ومكتبة البنية التحتية لتقنية المعلومات وإدارة دورة حياة المنتج وإدارة دورة حياة التطبيق. وقد أعاد الكثير من هذه الوظائف والنماذج تعريف إدارة التهيئة من نهجها الشمولي التقليدي إلى الإدارة الفنية. والبعض يعامل إدارة التهيئة على أنها تشبه نشاطًا مكتبيًا، وأنها تقوم بالتحكم في التغيير أو إدارة التغيير كنظام منفصل أو مستقل. ومع ذلك، فدائمًا ما تكون المحصلة النهائية هي إمكانية التتبع.
إدارة تهيئة البرامج.
يرى المتخصصون أن عملية إدارة تهيئة البرامج التقليدية هي الحل الأفضل للتعامل مع التغييرات في مشاريع البرامج؛ فهذه العملية تحدد السمات الوظيفية والمادية للبرامج في نقاطٍ مختلفة في الوقت المناسب، وتقوم بتنفيذ تحكم منهجي في التغييرات الطارئة على السمات المحددة وذلك لغرض الحفاظ على وحدة البرامج وإمكانية التتبع خلال دورة عمر تطوير البرامج.
كما تحدد عملية إدارة تهيئة البرامج مدى الحاجة لتتبع التغييرات والقدرة على التحقق من احتواء البرامج الصادرة النهائية على كل التحسينات المقررة التي يُفترض تضمينها في الإصدار، وهي توضح أربعة إجراءاتٍ يجب تحديدها لكل مشروع برامج من أجل ضمان سلامة تنفيذ مشروع إدارة تهيئة البرامج هذه الإجراءات هي:
تتغير هذه المصطلحات والتعريفات من معيار إلى آخر، لكنها تبقى ذاتها بصفة أساسية.
وتُستخدم إدارة التهيئة على نطاق واسع من جانب المؤسسات العسكرية لإدارة الجوانب الفنية لأي نظم معقدة مثل نظم الأسلحة والمركبات ونظم المعلومات. ويجمع هذا النظام بين جوانب القدرة التي تتيحها هذه الأنظمة للمؤسسة وبين قضايا إدارة التغيير الطارئ على هذه الأنظمة بمرور الوقت.
وبعيدًا عن الشق العسكري، تناسب إدارة التهيئة مجموعة كبيرة من المجالات وقطاعات الصناعة والتجارة.
إدارة تهيئة أجهزة الحاسوب.
إدارة تهيئة أجهزة الحاسوب هي عملية إنشاء سجلٍ حديث لكل مكونات البنية التحتية والاحتفاظ به، بما في ذلك الوثائق ذات الصلة. وتهدف هذه العملية إلى إظهار مكونات البينة التحتية وتوضيح المواقع المادية والروابط بين كل عنصر، والتي تُعرف باسم عناصر التهيئة.
وتتجاوز تهيئة أجهزة الحاسب هذا النطاق إلى تسجيل المكونات المادية للحاسوب لغرض إدارة الأصول، رغم إمكانية استخدامها للاحتفاظ بمعلومات الأصول. وتتمثل القيمة الإضافية المقدمة في المصدر الغني لمعلومات الدعم التي تتيحها لكل الأطراف المعنية. وعادةً ما يتم حفظ هذه المعلومات في قاعدة بيانات إدارة التهيئة (CMDB). وقد تم إدخال هذا المفهوم بواسطة [مكتبة البنية التحتية لتقنية المعلومات (ITIL)].
ويُفترض أن نطاق إدارة التهيئة يشمل، على الأقل، جميع عناصر التهيئة المستخدمة في تقديم خدماتٍ مباشرة وتشغيلية.
وتتيح إدارة تهيئة أجهزة الحاسوب التحكم المباشر في أصول تقنية المعلومات (IT) وتحسين قدرة مزود الخدمة على تقديم خدمات تقنية معلومات جيدة بطريقة اقتصادية وفعالة؛ ويجب أن تعمل إدارة التهيئة بشكل وثيق مع إدارة التغييرات.
كما يجب تسجيل جميع مكونات البنية التحتية لتقنية المعلومات في قاعدة بيانات إدارة التهيئة. وتشمل مسؤوليات إدارة التهيئة المتعلقة بقاعدة بيانات إدارة التهيئة ما يلي:
ويفترض أن نطاق إدارة التهيئة يشمل الآتي:
وتشمل مزايا إدارة تهيئة أجهزة الحاسوب ما يلي:
أنظمة الصيانة.
تُستخدم إدارة الهيئة للاحتفاظ بفهم لحالة الأصول المعقدة بُغية الحفاظ على أعلى مستوى للخدمة مقابل أقل تكلفة. وعلى وجه التحديد، تهدف هذه العملية لضمان عدم تعطيل العمليات بسبب تجاوز الأصل (أو أجزاء من الأصل) لحدود العمر الافتراضي المقرر له أو تدنيه عن مستويات الجودة.
ومن المنظور العسكري، غالبًا ما يُصنّف هذه النوع من الأنشطة على أنه "استعداد للمهمات" ويسعى إلى تحديد الأصول المتاحة ونوع المهمة المخصصة لها؛ ومن الأمثلة التقليدية على ذلك هو تحديد ما إذا كانت الطائرات على متن حاملة الطائرات مجهزة بالقنابل للدعم الأرضي أو صواريخ للدفاع.
وثمة نظرية لصيانة التهيئة توصل إليها مارك بيرجس
, مع تطبيقٍ عملي على أنظمة الحاسوب الحالية في برنامج Cfengineالقادر على إجراء إصلاح فعليّ فضلاً عن الصيانة الوقائية.
يعد فهم الحالة "كما هي" للأصل ومكوناته الرئيسية عنصرًا أساسيًا في الصيانة الوقائية المستخدمة في الصيانة والإصلاح وأنظمة الفحص الدقيق وإدارة أصول المؤسسات.
وتعتمد الأصول المعقدة مثل الطائرات والسفن والآلات الصناعية، إلى غير ذلك على عناصر كثيرة مختلفة قابلة للصيانة. وغالبًا ما تُعرّف هذه القابلية للصيانة من حيث مقدار الاستخدام الذي قام به المكون منذ أن كان جديدًا ومنذ تركيبه ومنذ إصلاحه، ومقدار الاستخدام الذي قام به طوال فترة عمره علاوة على العديد من العوامل المقيدة الأخرى. وقد كان استيعاب مدى قرب نهاية العمر الافتراضي لكل من هذه المكونات إجراءً رئيسيًا ينطوي على الاحتفاظ بسجل دقيق للعمل حتى التطورات الأخيرة في البرامج.
الصيانة التنبؤية.
تستخدم الكثير من أنواع المكونات أجهزة استشعار إلكترونية للحصول على البيانات التي تتيح رصد الحالة مباشرة. ويتم تحليل هذه البيانات في مكانها أو في موقع بعيد بواسطة الحاسوب لتقييم مدى قابليتها الحالية للصيانة و، بشكل متزايد، حالتها المرجحة في المستقبل التي تشير إلى الأعطال المستقبلية المحتملة استنادًا إلى أمثلة سابقة للعطل من خلال الخبرة الميدانية وعمليات النمذجة. ويعد هذا أساس "الصيانة التنبؤية".
ومن الضروري توافر بيانات دقيقة وحديثة حتى يتسنى لإدارة التهيئة توفير قيمة تشغيلية، في حين يمكن أن يشكل عدم توافرها عامل تقييد. وقد أصبح الحصول على البيانات التشغيلية ونشرها على مؤسسات الدعم المختلفة صناعة في حد ذاتها.
وقد تزايد عدد المستخدمين لهذه البيانات بصورة أكبر وأكثر تعقيدًا مع نمو البرامج المقدمة من الشركات المصنعة للمعدات الأصلية. وتهدف هذه إلى تقديم توافر مضمون للمشغلين وجعل الصورة أكثر تعقيدًا لدى إدارة المشغل للأصل، لكن الشركة المصنعة للمعدات الأصلية تتحمل مسؤولية ضمان قابليتها للصيانة. وفي هذه الحالة، تتصل المكونات الفردية داخل الأصل مباشرة مع مركز تحليل مقدم من الشركة المصنعة للمعدات الأصلية أو محلل مستقل.
الصناعات الإنشائية.
في الآونة الأخيرة، تم تطبيق إدارة التهيئة على مشاريع إنشائية يمكن في الغالب أن تكون معقدة للغاية وتحتوي على كمية هائلة من التفاصيل والتغييرات التي يتعين توثيقها. وثمة جهات إنشائية مثل الإدارة الاتحادية للطرق السريعة قامت باستخدام إدارة التهيئة لمشاريع البنية التحتية لديها. وقد كان هناك العديد من برامج إدارة التهيئة المطورة والقائمة على الإنشاء التي تهدف إلى توثيق أوامر التغيير وطلبات المعلومات وذلك لضمان بقاء المشروع ضمن الجدول الزمني والميزانية. كما يمكن لهذه البرامج حفظ المعلومات للمساعدة في صيانة وتعديل البنية التحتية لدى استكمالها. وقد تم اختبار أحد هذه التطبيقات، وهو ccsNet، في دراسة حالة ممولة من قبل إدارة النقل الاتحادية، حيث تم قياس إدارة التهيئة من خلال المقارنة بين 80% تقريبًا من الإنشاءات المستكملة في القطاعين الأول والثاني من الخط الأحمر، وهو مشرع إنشاء سكك حديدية بتكلفة 5.3 مليار دولار، لدى وكالة النقل المتروبولوتية لمقاطعة لوس أنجلوس. وقد توصلت هذه الدراسة إلى نتائج تشير إلى فائدة في استخدام إدارة التهيئة في مشاريع لها هذه الطبيعة.
لغة كامل الموضوعية أو الأو كامل هي التطبيق الرئيسي للغة البرمجة كامل والتي كتبها كل من زافيير ليروي وجيورم فويلون وداميان دوليجي وديديير ريمي وآخرين عام 1996. وتعمل لغة أو كامل على التوسع في لغة كامل الرئيسية مع مقومات توجهها موضوعي.
وتتضمن مجموعة أدوات لغة أو كامل مترجم على أعلى مستوى ومصنف بايت كود ومصنف شفرة أصلية مثالي. كما يضم مكتبة كبيرة قياسية تجعله مفيدا بالنسبة للكثير من التطبيقات الشبيهة كالبايثون أو البريل ويعد أيضا من مقومات البرمجة ذات التوجه الموضوعي والوحدوية بشكل كبير مما يجعله قابل للتطبيق بالنسبة لهندسة البرمجيات بصورة واسعة النطاق. وأو كامل هو البرنامج اللاحق لكامل لايت. وكلمة كامل هي اختصار للمصطلح Categorical Abstract Machine Language أو لغة الآلة المجردة المطلقة بالرغم من أو كامل تتخلى عن هذه الآلة المجردة.
كما أنه يتم إدارة مشروع أو كامل عبر مورد مفتوح وحر تحتفظ به شركة إنريا في الأساس. وفي السنوات الأخيرة، اشتقت العديد من اللغات الجديدة بعض عناصرها من الأو كامل وأكثرها شهرة هي #F وسكالا.
تشتهر تلك اللغات المشتقة من إم إل بأنظمتها النمطية الساكنة ومصنفات الاستدلال على النمط. كما توحد الأو كامل بين البرمجة الوظيفية والإلزامية والموضوعية تحت مظلة نظام طباعة شبيه بالإم إل. وهذا يعني أنه ليس هناك ضرورة لأن يكون مؤلف البرنامج معتادا على نموذج اللغة الوظيفية البحت من أجل استخدام الأو كامل.
ويمكن أن يساعد نظام النمط الساكن للأو كامل في التخلص من المشاكل أثناء التشغيل، إلا أنه يجبر المبرمج أيضا على التأقلم مع بعض القيود الخاصة بنظام الطباعة والتي تتطلب تفكيرا عميقا وانتباها شديدا. أما المصنف المستدل على النمط فهو يقلل بشدة من الحاجة لحواشي طباعة تفسيرية يدوية (على سيبل المثال لا تحتاج طباعة البيانات للمتغيرات وتوقيع الوظائف عادة أن يتم التصريح عنها علنا، كما تفعل في الجافا). وبالرغم من ذلك فإن الاستخدام الفاعل لنظام طباعة الأو كامل يمكن أن يحتاج إلى بعض التعقيدات من جانب المبرمج.
ويتم تمييز لغة أو كامل عن اللغات الأخرى بتأكيدها على الأداء. أولا فإن نظام نمطيتها الساكن يجعل عدم التوافق في الطباعة أثناء التشغيل أمرا مستحيلا ومن ثم يمكن تجنب الطباعة أثناء التشغيل والتدقيقات الأمنية التي تكون عبئا على أداء اللغات المطبوعة ديناميكيا بينما لا تزال تكفل الأمان أثناء التشغيل (فيما عدا حين يتم إغلاق ميزة تدقيق حدود الصفوف أو حين يتم استخدام ميزات طباعة معينة غير آمنة، وهي حالات نادرة بما يكفي يمكن تجنبها بسهولة عمليا).
وبغض النظر عن تدقيق الطباعة فإن لغات البرمجة الوظيفية هي بوجه عام تتحدى تصنيف شيفرة لغة الآلة ذات الكفاءة بسبب بعض الأمور مثل مشكلة "فانارج"، بالإضافة إلى الحلقة والسجل وتعليمات المثالية القياسية، فإن المصنف المثالي لأو كامل يقوم بتوظيف تقنيات تحاليل برامج ساكنة لجعل القيمة الخاصة بالفراغات الصندوقية وتقسيم الإغلاق أفضل بما يساعد على زيادة أداء الشفرة الناتجة حتى إذا كانت تستغل مقومات البرمجة الوظيفية بشكل مكثف.
وقد صرح زافير ليروي بأن "لغة أو كامل تعمل على الأقل على توصيل 50% من أداء مصنف السي المتواضع"، ولكن من الممكن إجراء مقارنة مباشرة. ويمكن تطبيق بعض وظائف المكتبة القياسية للأو كامل عبر أنظمة حسابية أسرع من الوظائف المكافئة في المكتبات القياسية للغات الأخرى. على سبيل المثال فإن تطبيق اتحاد معين في مكتبة الأو كامل أسرع بشكل متقارب من الوظيفة المكافئة في المكتبات القاسية للغات الإلزامية (مثل السي بلس بلس والجافا) لأن تطبيق الأو كامل يستغل ثبوت بعض المجموعات من أجل إعادة استخدام أجزاء من مجموعات المدخلات في النتائج (المثابرة).
من بين سمات أوكامل: نظام نمطي ساكن، استدلال من النمط، تعدد الأشكال القياسي، تكرار اللاحقات، التطابق مع النموذج، إيقاف من الدرجة الأولى للمفردات، وحدات قياسية (فانكتور)، التعامل الاستثنائي وجمع القمامات الآلية الإضافية والتوليدية.
وتشتهر لغة أو كامل على وجه الخصوص بالتوسع في الاستدلال بالنمط بأسلوب إم إل نحو نظام موضوعي في اللغة ذات الهدف العام، ويتيح ذلك الطباعة الثانوية الهيكلية حيث تكون الأحرف المطبوعة متطابقة إذا كانت توقيعات طريقتها متوافقة أيضا بغض النظر عن موروثاتها المعروفة والسمة الغير معتادة في اللغات التي تطبع بطريقة ساكنة.
كما يتوافر سطح بيني للوظائف الغريبة ليتم ربطها ببدائيات لغة السي متضمنا دعما لغويا للصفوف العددية ذات الكفاءة في صياغات تتماشى مع كل من السي والفورتران. وتدعم لغة الأو كامل أيضا إنشاء مكتبات لوظائف الأو كامل يمكن ربطها بالبرنامج الرئيسي في السي بحيث يمكن للمرء توزيع مكتبة الأو كامل على مبرمجي السي الذين ليس لديهم أي معرفة أو ليس متاحا لديهم تطبيق الأو كامل.
ويتضمن توزيع أوكامل:
كما يتوافر مصنف شفرات أصلي للعديد من المنصات من بينها اليونكس والمايكروسوفت ويندوز والأبل ماك أو إس. كما يضمن مدعم توليد الشفرة الأصلية إمكانية نقل الهياكل الرئيسية بشكل ممتاز: IA-32, IA-64, AMD64, HP/PA; PowerPC, SPARC, Alpha, MIPS و StrongARM.
ويمكن تحرير شفرة البايت وبرامج الشفرة الأصلية بأسلوب متعدد المراحل مع إمكانية التحول إلى سياق وقائي. ومع ذلك نظرا لأن جامع القمامة ليس مصمم من أجل التزامن فليس هناك ميزة المعالجة المتعددة المتناسقة. تنفذ مراحل الأو كامل في نفس العملية عبر مشاركة الوقت فقط ك"فانكتوري وأوكمالنت/ بلازما"
أمثلة على الشفرات.
يمكن بكل سهولة دراسة قصاصات شفرة الأو كامل بإدخالها إلى "مستوى أعلى". وهذه هي جلسة أو كامل تفاعلية التي تطبع الأنماط الاستدلالية للتعبيرات الناتجة أو المحددة. يبدأ المستوى الأعلى من الأو كامل ببساطة عبر تنفيذ برنامج "أوكامل":
$ ocaml
Objective Caml version 3.09.0
بعد ذلك يمكن إدخال الشفرة على الفور، على سبيل المثال لحساب 1+2*3:
# 1 + 2 * 3;;
- : int = 7
يستدل الأوكامل على نمط التعبير بكونه "int" (أي رقم صحيح دقيق ناتج عن الآلة) ويمنحنا الرقم "7"
هالو وورلد.
البرنامج التالي "hello.ml":
يمكن تصنيفه إلى شفرة بايت قابلة للتنفيذ:
$ ocamlc hello.ml -o hello
أو تصنيفه إلى شفرة مصدرية مثالية قابلة للتنفيذ:
$ ocamlopt hello.ml -o hello
ثم يتم تنفيذها بالطريقة التالية:
$./hello
تلخيص قائمة مجموعة من الأعداد الصحيحة.
القوائم هي أحد أنواع البيانات الرئيسية في الأو كامل. والمثال التالي للشفرة يحدد قيم دالة متكررة تقبل برهانا واحدا xs. وتتكرر الدالة عبر قائمة موجودة وتتيح لنا قيمة من عناصر الأرقام الصحيحة. بيان :التطابق Match" يعني وجود متشابهات: ومع عنصر التحول للغات السي بلس سي سي أو الجافا، بالرغم من أنه أمر أكثر عمومية.
let rec sum xs =
match xs with
[] -&gt; 0
| x :: xs' -&gt; x + sum xs'
# sum [1;2;3;4;5];;
- : int = 15
وهناك طريقة أخرى تكون باستخدام دالة الطي القياسية التي تنجح مع القوائم:
let sum xs =
List.fold_left (+) 0 xs
كويكسورت Quicksort.
تعير لغة أو كامل نفسها للتعبير الدقيق لعمليات حسابية متكررة. المثال التالي على أحد الشفرات يستعين بعمليات حسابية شبيهة بالكويك سورت أو التصنيف السريع الذي يقوم بتصنيف أحد القوائم بترتيب متزايد ومتسرع.
let rec qsort = function
| pivot :: rest -&gt;
let is_less x = x &lt;pivot in
let left, right = List.partition is_less rest in
qsort left @ [pivot] @ qsort right
مفارقة عيد الميلاد.
البرنامج التالي يقوم بحساب أصغر عدد من الأشخاص الموجودين في غرفة ما اولذين يكون احتمال تفرد يوم مولدهم بشكل كامل أقل من 50% (بما يسمى مفارقة عيد الميلاد حيث يكون الاحتمال بالنسبة لشخص واحد 100% بينما لشخصين 364/365... الخ) (الإجابة = 23).
let year_size = 365.;;
let rec birthday_paradox prob people =
let prob' = (year_size -. float people) /. year_size *. prob in
if prob' &lt;0.5 then
Printf.printf "answer = %d\n" (people+1)
birthday_paradox prob' (people+1) ;;
birthday_paradox 1.0 1
الأعداد الكنسية.
الشفرة التالية تحدد تشفيرا للكنيسة وضعته للأعداد الطبيعية، مع عدد لاحق (succ) وعدد إضافي (add). الأعداد الكنسية هي دالة ذات مستوى أعلى تقبل الدالة f والقيمة x وتضيف f إلى x لعدد n من المرات. ولتحويل العدد الكنسي من قيمته الوظيفية إلى سلسلة معلومة نقوم بإدخاله على دالة تدخل السلسلة s إلى مدخلاتها والتسلسل الثابت " 0
let zero f x = x
let succ n f x = f (n f x)
let one = succ zero
let two = succ (succ zero)
let add n1 n2 f x = n1 f (n2 f x)
let to_string n = n (fun k -&gt; "S" ^ k) "0"
let _ = to_string (add (succ two) two)
الدالة العاملية دقيقة التحكم (المكتبات).
يمكن الوصول بشكل مباشر إلى مجموعة متنوعة من المكتبات من أوكامل. على سبيل المثال، تحتوي أو كامل على مكتبة مؤسسة بداخلها للعمليات الرياضية الدقيقة في التحكم. ونظرا لأن الدوال العاملية تتزايد بسرعة كبيرة، فهي سرعان ما تغمر الأعداد الدقيقة آليا (عادة 32 أو 64 بايت). ومن ثم فإن التحويل إلى عوامل أمر مناسب للعمليات الرياضية الدقيقة تحكميا.
في الأوكامل تتيح وحدة num عمليات حسابية دقيقة تحكميا ويمكن تحميلها إلى مستوى أعلى عامل باستخدام:
يمكن بعد ذلك كتابة الدالة العاملية باستخدام عمليات عددية دقيقة تحكميا =/,*/ و-/:
if n =/ Int 0 then Int 1 else n */ fact(n -/ Int 1);;
val fact : Num.num -&gt; Num.num = &lt;fun&gt;
ويمكن للدالة أن تقوم بحساب عوامل أكبر مثل 120!:
- : string =
"6689502913449127057588118054090372586752746333138029810295671352301633
55724496298936687416527198498130815763789321409055253440858940812185989
8481114389650005964960521256960000000000000000000000000000"
تركيب الجمل المرهق بالنسبة لعمليات Num يمكن التخفيف منه وذلك بفضل الامتداد "كامل بي فور سينتاكس" الذي يسمى الحمل الزائد المعين Delimited Overloafing:
- : Num.num =
&lt;num 668950291344912705758811805409037258675274633313802981029567
135230163355724496298936687416527198498130815763789321409055253440
8589408121859898481114389650005964960521256960000000000000000000000000000&gt;
المثلث (جرافيك).
البرنامج التالي "simple.ml" يقوم بتصميم مثلث دوار ثنائي الأبعاد باستخدام أوبن جل:
let () =
ignore(Glut.init Sys.argv);
Glut.initDisplayMode ~double_buffer:true ();
ignore (Glut.createWindow ~title:"OpenGL Demo");
let angle t = 10. *. t *. t in
let render () =
GlClear.clear [ `color ];
GlMat.load_identity ();
GlMat.rotate ~angle: (angle (Sys.time ())) ~z:1. ();
GlDraw.begins `triangles;
List.iter GlDraw.vertex2 [-1., -1.; 0., 1.; 1., -1.];
GlDraw.ends ();
Glut.swapBuffers () in
GlMat.mode `modelview;
Glut.displayFunc ~cb:render;
Glut.idleFunc ~cb:(Some Glut.postRedisplay);
Glut.mainLoop ()
ويحتاج ذلك إلى روابط تربط بين لابل جل وأوبن جل. يمكن بعد ذلك تصنيف البرنامج إلى شفرة بايت باستخدام:
$ ocamlc -I +lablGL lablglut.cma lablgl.cma simple.ml -o simple
أو إلى شفرة مصدرية:
$ ocamlopt -I +lablGL lablglut.cmxa lablgl.cmxa simple.ml -o simple
ثم التنفيذ:
$./simple
وهو برنامج جرافيك ثنائي وثلاثي الأبعاد أكثر تطورا وتعقيدا وعالي الأداء تم تطويره بسهولة في الأو كامل. وبفضل استخدام أوبن جل فإن البرامج الناتجة لا تكون فقط بليغة وعلى قدر من الكفاءة ولكنها تكون أيضا ذات منصة تبادلية مصنفة دون أي تغير في كافة المنصات الرئيسية.
تسلسل فيبوناتشي.
الشفرة التالية تستطيع حساب تسلسل فيبوناتشي لعدد تم إدخاله نشير إليه ب " ن "، وهو يستعين بالتكرار للاحقة والتوافق النمطي:
let rec fib_aux n a b =
match n with
| 0 -&gt; a
| _ -&gt; fib_aux (n - 1) (a + b) a;;
let fib n = fib_aux n 0 1;;
من المحتمل أكثر كتابتها:
let fib n =
| _ -&gt; fib_aux (n - 1) (a + b) a
fib_aux n 0 1;;
اللغات المشتقة.
ميتا أو كامل.
ميتا أو كامل هو امتدادا لبرمجية متعددة الاستخدامات من أوكامل تمكن من التصنيف الإضافي لشفرات آلات جديدة خلال وقت التشغيل. وتحت ظروف معينة يمكن حدوث بعض التسارع الواضح باستخدام البرمجة متعددة المراحل نظرا لتوافر المزيد من المعلومات التفصيلية حول البيانات التي ينبغي معالجتها في وقت التشغيل أكثر من تلك في وقت التصنيف المعتاد، لذلك يمكن للمصنف الإضافي التخلص من الكثير من حالات تفقد الظروف... الخ.
فعلى سبيل المثال: إذا كان من المعروف أنه في وقت التصنيف يكون من المطلوب وجود دالة قوة محددة x -&gt; x^n باستمرار، ولكن القيمة "ن " معلومة وقت في وقت التشغيل، فبإمكانك استخدام دالة قوة ذات مرحلتين في الميتا أوكامل:
let rec power n x =
then.&lt;1&gt;.
if even n
then sqr (power (n/2) x)
else.&lt;.~x *. ~(power (n-1) x)&gt;.
وبمجرد أن تعلم قيمة " ن" وقت التشغيل يمكنك أن تتولد دالة قوة سريعة للغاية ومتخصصة أيضا:
.&lt;fun x -&gt;.~(power 5.&lt;x&gt;.)&gt;.
فتكون النتيجة:
fun x_1 -&gt; (x_1 *
let y_3 =
let y_2 = (x_1 * 1)
in (y_2 * y_2)
in (y_3 * y_3))
ويتم جمع الدالة الجديدة تلقائيا:
لغات مشتقة أخرى.
أتومكامل وتتيح تزامما بدائيا بالنسبة للتطبيق شديد الصغر للشفرة.
برامج مكتوبة بلغة أوكامل.
وقد اتخذت شركة جين ستريت كابيتال التجارية الخاصة لغة أو كامل لتكون لغتها المفضلة.
-oriented dialect of ML
-oriented extension to the functional language هاسكل
مجموعة الثمانية هي وحدة تخزين المعلومات في مجال الحوسبة والاتصال عن بعد التي تتكون من ثمانية بت. وغالبا ما يستخدم المصطلح عندما يكون مصطلح البايت غامضاَ، إذ لا يوجد أي معيار لحجم البايت.
ان البايت وحدة ليست موحدة وقد مثلت العديد من أحجام التخزين في تاريخ الحوسبة. ومع ذلك، وبسبب تأثير عدة معماريات حاسوبية رئيسية وخطوط إنتاج، أصبح البايت يرتبط بشكل كبير مع 8 بت. في حين أن بالنسبة لمعظم الناس اليوم، أصبح البايت ومجموعة الثماني مترادفان، ويتجنب أولئك الذين يعملون مع بعض النظم القديمة الالتباس.
غالبا ما يتم عرض الثمانية باستخدام العديد من الممثلات، على سبيل المثال في نظام عد ستة عشري، أو نظام عد عشري، أو نظام عد ثماني. والقيمة الثنائية لكل مجموعة 8 بت (أو تشغيل) هي 11111111، مساوية لقيمة عد ست عشري FF، والقيمة العشرية 255، والقيمة الثمانية 377.