سؤال

أسمع هذا المصطلح قذف حولها في العديد من السياقات المختلفة.ما هو ؟

هل كانت مفيدة؟

المحلول

التعريفي البرمجة عند كتابة التعليمات البرمجية الخاصة بك في مثل هذه طريقة أنه يصف ما تريد القيام به ، وليس كيف كنت تريد أن تفعل ذلك.فمن يترك المترجم لمعرفة كيف.

أمثلة من التعريفي لغات البرمجة SQL و Prolog.

نصائح أخرى

إجابات أخرى بالفعل القيام بعمل رائع في شرح ما التعريفي البرمجة, لذلك أنا مجرد الذهاب الى تقديم بعض الأمثلة لما يمكن أن تكون مفيدة.

السياق الاستقلال

التعريفي البرامج سياق مستقل.لأنها إلا أن تعلن ما هو الهدف النهائي ، ولكن ليس وسيط خطوات للوصول إلى هذا الهدف ، نفس البرنامج يمكن أن تستخدم في سياقات مختلفة.هذا من الصعب القيام به مع برامج حتمية, لأنها غالبا ما تعتمد على السياق (مثلا ، الدولة الخفية).

تأخذ yacc كمثال على ذلك.وهو محلل مولد الملقب.مترجم مترجم خارجي التعريفي DSL لوصف قواعد اللغة ، بحيث محلل لتلك اللغة يمكن أن يكون تلقائيا ولدت من الوصف.لأن السياق الاستقلال ، يمكنك أن تفعل أشياء كثيرة مختلفة مع هذه القواعد:

  • توليد ج محلل لهذا النحوي (استخدام الأصلي القضية yacc)
  • توليد C++ محلل على هذا النحو
  • توليد جافا محلل لهذا النحوي (باستخدام جاي)
  • توليد C# محلل لهذا النحوي (باستخدام GPPG)
  • توليد روبي محلل لهذا النحوي (باستخدام Racc)
  • إنشاء شجرة التصور على هذا النحو (باستخدام GraphViz)
  • ببساطة جدا-طباعة فاخرة-التنسيق و تسليط الضوء على بناء الجملة من yacc الملف المصدر نفسه إدراجه في الدليل المرجعي كما النحوية تحديد اللغة الخاصة بك

والعديد من المزيد ...

الأمثل

لأنك لا يصف الكمبيوتر الخطوات التي تتخذ في ما أمر ، فإنه يمكن إعادة ترتيب البرنامج الخاص بك أكثر من ذلك بكثير بحرية, ربما حتى تنفيذ بعض المهام في نفس الوقت.وخير مثال هو استعلام مخطط محسن الاستعلام عن قاعدة بيانات SQL.معظم قواعد البيانات SQL تسمح لك لعرض الاستعلام أنهم فعلا المنفذة مقابلالاستعلام التي طلب لهم لتنفيذ.وغالبا ما تكون هذه الاستفسارات نظرة لا شيء مثل كل الآخرين.الاستعلام مخطط يأخذ الأشياء في الاعتبار أنك لن حتى حلمت:التناوب استتار القرص طبق ، على سبيل المثال أو حقيقة أن بعض مختلفة تماما تطبيق مختلف تماما المستخدم فقط أعدم مماثلة الاستعلام الجدول الذي كنت الانضمام مع الذي كنت قد عملت بجد لتجنب التحميل بالفعل في الذاكرة على أي حال.

هناك اهتمام المفاضلة هنا:يحتوي الجهاز على العمل بجد لمعرفة كيف أن تفعل شيئا مما كان في حتمية اللغة ، ولكن عندما لا معرفة ذلك ، فقد أكثر حرية و أكثر من ذلك بكثير معلومات الأمثل المرحلة.

فضفاضة:

التعريفي البرمجة يميل نحو:-

  • مجموعات من الإعلانات أو التعريفي البيانات, كل منها له معنى (في كثير من الأحيان في المجال المشكلة) و قد يكون مفهوما بشكل مستقل و في العزلة.

البرمجة حتمية يميل نحو:-

  • تسلسل الأوامر ، كل منها تنفيذ بعض الإجراءات ؛ ولكن التي قد أو قد لا يكون لها معنى في المشكلة المجال.

ونتيجة حتمية أسلوب يساعد القارئ على فهم اليات ما يقوم به في الواقع ، ولكن قد تعطي القليل من التبصر المشكلة أنه يهدف إلى حل.من ناحية أخرى ، التعريفي أسلوب يساعد القارئ على فهم المشكلة المجال و نهج النظام يأخذ نحو حل المشكلة ، ولكن هو أقل بالمعلومات بشأن هذه المسألة الميكانيكا.

برامج حقيقية (حتى تلك التي كتبت في لغات صالح طرفي الطيف ، مثل حاسوب أو ج) تميل إلى أن تكون كل الأنماط موجودة بدرجات مختلفة في نقاط مختلفة لتلبية مختلف التعقيدات احتياجات الاتصال من قطعة.نمط واحد ليست متفوقة على غيرها ؛ هم فقط تخدم أغراضا مختلفة ، كما هو الحال مع العديد من الأشياء في الحياة الاعتدال هو المفتاح.

أنا آسف لكن أنا أختلف مع كثير من إجابات أخرى.وأود أن توقف هذا مشوش سوء فهم تعريف التعريفي البرمجة.

تعريف

المرجعي الشفافية (RT) من دون التعبير هو المطلوب فقط السمة التعريفي البرمجة التعبير, لأنه هو السمة الوحيدة التي لا يشارك مع البرمجة حتمية.

أخرى استشهد سمات التعريفي البرمجة تستمد من هذا RT.الرجاء انقر فوق الارتباط التشعبي على شرح مفصل.

جدول سبيل المثال

اثنين من الإجابات المذكورة جدول البرمجة.في الحالات التي يكون فيها جدول البرمجة (أ.ك.أ.الصيغ) غير قابلة للتغيير العالمية الدولة, ثم هو معلن البرمجة.وذلك لأن قابلة للتغيير قيم الخلية هي متجانسة المدخلات و الإخراج من main() (برنامج كامل).القيم الجديدة ليست مكتوبة إلى الخلايا بعد كل صيغة يتم تنفيذها ، وبالتالي فهي ليست قابلة للتغيير من أجل حياة التعريفي برنامج (تنفيذ جميع الصيغ في جدول).وهكذا بالنسبة إلى كل الصيغ عرض هذه قابلة للتغيير الخلايا غير قابل للتغيير.RT وظيفة يسمح الوصول غير قابل للتغيير الدولة العالمية (و أيضا قابلة للتغيير المحلية الدولة).

وبالتالي القدرة على التحور القيم في الخلايا عند إنهاء البرنامج (كناتج من main()), لا يجعلها قابلة للتغيير القيم المخزنة في سياق النظام.الفرق الرئيسي هو قيم الخلية لا يتم تحديث بعد كل جدول صيغة أداء ، وبالتالي ترتيب أداء الصيغ لا يهم.الخلية القيم يتم تحديثها بعد كل الصيغ التقريرية تم تنفيذها.

هنا مثال.

في CSS (استخدام أسلوب صفحات HTML) ، إذا كنت تريد صورة عنصر 100 بكسل عالية و 100 بكسل ، يمكنك ببساطة "يعلن" أن هذا ما تريد على النحو التالي:

#myImageId {
height: 100px;
width: 100px;
}

يمكنك أن تنظر في CSS التعريفي "ورقة نمط" اللغة.

المتصفح المحرك الذي يقرأ يفسر هذا CSS مجاني لجعل الصورة تظهر هذا طويل وهذا واسعة ومع ذلك يريد.متصفح مختلف محركات (مثل محرك أي محرك كروم) تنفيذ هذه المهمة بشكل مختلف.

فريدة من نوعها تطبيقات بالطبع لم يكتب في اللغة التقريرية ولكن في مسألة إجرائية مثل الجمعية, C, C++, Java, JavaScript, أو الثعبان.هذا الرمز هو مجموعة من الخطوات التي يتعين الاضطلاع بها خطوة خطوة (و قد تشمل المكالمات وظيفة).قد تفعل أشياء مثل أقحم القيم بكسل ، وتجعل على الشاشة.

التعريفي البرمجة هي الصورة ، حيث يتحتم البرمجة تعليمات اللوحة هذه الصورة.

كنت تكتب في التعريفي نمط إذا كنت "يقول أنه" بدلا من أن تصف الخطوات الكمبيوتر ينبغي أن تتخذ للوصول إلى حيث تريد.

عند استخدام XML إلى علامة المتابعة البيانات ، باستخدام التعريفي البرمجة لأنك قائلا: "هذا هو الشخص الذي هو عيد ميلاد ، و هناك هو عنوان الشارع".

بعض الأمثلة من حيث التعريفي و البرمجة حتمية الحصول على جنبا إلى جنب لمزيد من التأثير:

  • نوافذ العرض مؤسسة يستخدم التعريفي XML الجملة لوصف ما واجهة المستخدم تبدو وعن العلاقات (الربط) بين الضوابط و هياكل البيانات الأساسية.

  • منظم ملفات التكوين استخدام بناء الجملة التعريفي (بسيطة مثل "key=قيمة" أزواج) لتحديد أي سلسلة أو قيمة من البيانات يعني.

  • HTML علامات النص مع الكلمات التي تصف ما دور كل قطعة من النص في علاقته الوثيقة بأكملها.

تخيل excel الصفحة.مع الأعمدة بالسكان مع الصيغ لحساب كنت الضريبي.

كل منطق يتم أعلنت في خلايا النظام على احتساب هو تحديد الصيغة نفسها بدلا من الناحية الإجرائية.

هذا هو نوع من ما التعريفي البرمجة هو كل شيء.تعلن الفضاء مشكلة و حل بدلا من تدفق البرنامج.

حاسوب هو معلن فقط اللغة لقد الاستخدام.فإنه يتطلب نوعا مختلفا من التفكير ولكن من الجيد أن تعلم إذا فقط أن يعرضك إلى شيء آخر غير نموذجي لغة البرمجة الإجرائية.

منذ كتبت قبل الإجابة ، لقد وضعت التعريف الجديد من التعريفي الملكية التي نقلت أدناه.يجب أيضا تعريف البرمجة حتمية كما المزدوجة الملكية.

هذا التعريف هو أفضل واحد لقد قدمت في بلدي قبل الإجابة لأنه مقتضبة و هو أكثر العامة.ولكن قد يكون من الصعب جروك, لأن المقصود من عدم اكتمال النظريات المطبقة في البرمجة و الحياة بشكل عام يصعب على البشر أن التفاف رأيهم حولها.

ونقلت شرح تعريف يناقش دور نقية البرمجة الوظيفية يلعب في التقريرية البرمجة.

التعريفي مقابلحتمية

التعريفي الملكية غريب منفرجة ، و من الصعب التقاط في الناحية الفنية التعريف الدقيق الذي لا يزال العامة و لا غموض, لأنه من السذاجة فكرة أننا يمكن أن تعلن معنى (a.ك.وهي دلالات) من البرنامج دون تكبد آثار جانبية غير مقصودة.هناك توتر متأصل بين التعبير من معنى وتجنب الآثار غير المقصودة ، هذا التوتر في الواقع مستمد من عدم اكتمال النظريات البرمجة و الكون.

فمن التبسيط ، من الناحية الفنية غير دقيقة, و في كثير من الأحيان غامضة لتحديد التعريفي كما ماذا تفعل و ضرورة حتمية كيف.غموض القضية هو "ما"هو "كيف"في برنامج مخرجات البرنامج— مترجم.

من الواضح غير محدود العودية أن يجعل اللغة تورينج كاملة, هو أيضا بالقياس في دلالات— ليس فقط في هيكل بنائي التقييم (a.ك.أ.التشغيلية دلالات).هذا هو منطقيا مثال مشابه نظرية غودل— "أي منظومة كاملة من البديهيات هو أيضا غير متناسقة".يتأمل متناقضة غرابة من هذا الاقتباس!بل هو أيضا مثال يوضح كيفية التعبير عن دلالات لا يمكن اثباتها ملزمة ، وبالتالي لا يمكننا إثبات2 هذا البرنامج (و بالقياس لها دلالات) وقف.ك.أ.وقف نظرية.

عدم نظريات مستمدة من الطبيعة الأساسية من الكون الذي كما جاء في القانون الثاني للديناميكا الحرارية هو "الكون (أ.ك.أ.# من المستقلين الاحتمالات) تتجه إلى الحد الأقصى إلى الأبد".الترميز و تصميم البرنامج لم ينتهي أبدا— إنه على قيد الحياة!— لأنه محاولات لمواجهة العالم الحقيقي الحاجة ، و دلالات من العالم الحقيقي تتغير دائما و تتجه إلى المزيد من الإمكانيات.البشر لم تتوقف أبدا عن اكتشاف أشياء جديدة (بما في ذلك الأخطاء في البرامج ;-).

على وجه التحديد من الناحية الفنية التقاط هذا الذكر المطلوب فكرة داخل هذا غريب الكون الذي لا يوجد لديه حافة (يتأمل ذلك!لا يوجد "خارج" من الكون) ، يتطلب مقتضب ولكن مخادعة-لا-تعريف بسيط صوت غير صحيحة حتى يتم شرح بعمق.

التعريف:


التعريفي الملكية حيث يمكن أن يوجد واحد فقط ممكن مجموعة من البيانات التي يمكن أن تعبر عن كل وحدات دلالية.

حتمية الملكية3 المزدوج ، حيث دلالات غير متناسقة في إطار تكوين و/أو يمكن التعبير عنها مع وجود اختلافات من مجموعات البيانات.


هذا تعريف التعريفي متميز المحلية في الدلالي نطاق ، وهذا يعني أنه يتطلب أن وحدات دلالية الحفاظ على الاتساق في معنى بغض النظر عن أين وكيف يتم إنشاء مثيل و العاملين في العالمية نطاق.وهكذا كل التعريفي وحدات الدلالي يجب أن يكون جوهريا متعامد كل ما يمكن الآخرين و ليست مستحيلة (بسبب عدم اكتمال النظريات) العالمية خوارزمية أو نموذج تشهد الاتساق ، الذي هو أيضا نقطة "أكثر ليست دائما أفضل"روبرت هاربر ، أستاذ علوم الحاسوب في جامعة كارنيجي ميلون ، واحد من المصممين القياسية مل.

ومن أمثلة هذه وحدات التعريفي دلالات تشمل الفئة نظرية functors مثلا على Applicative, الاسمية الكتابة, مساحات, اسمه المجالات ، و ث.r.t.على المستوى التنفيذي من دلالات ثم نقية البرمجة الوظيفية.

وهكذا مصممة بشكل جيد التعريفي اللغات المزيد من التعبير بوضوح عن معنى, وإن كان ذلك مع بعض خسارة عمومية في ما يمكن التعبير عنها, بعد مكاسب في ما يمكن التعبير الجوهرية مع الاتساق.

على سبيل المثال المذكور تعريف هي مجموعة من الصيغ في الخلايا من برنامج جداول البيانات— والتي ليس من المتوقع أن تعطي نفس المعنى عندما انتقلت إلى مختلف الصفوف والأعمدة الخلايا ، أيخلية معرفات تغيرت.الخلية المعرفات هي جزء من وليس من نافلة القول أن المعنى المقصود.لذلك كل جدول النتيجة هي فريدة من نوعها ث.r.t.إلى الخلية معرفات في مجموعة من الصيغ.الثابت وحدات الدلالي في هذه الحالة هو استخدام الخلايا معرفات كما المدخلات والمخرجات من نقية وظائف الخلايا الصيغ (انظر أدناه).

Hyper Text Markup Language a.ك.أ.HTML لغة صفحات الويب ثابتة— مثال للغاية (ولكن ليس تماما3) التعريفي اللغة أن (على الأقل قبل HTML 5) لديه القدرة على التعبير عن السلوك الديناميكي.HTML وربما كان أسهل لتعلم اللغة.عن السلوك الديناميكي, حتمية لغة البرمجة مثل جافا سكريبت عادة جنبا إلى جنب مع HTML.HTML بدون جافا سكريبت يناسب التعريفي التعريف لأن كل الاسمية نوع (أيالعلامات) يحتفظ بما يتفق المعنى في إطار التكوين ضمن قواعد بناء الجملة.

منافس تعريف التعريفي هو تبادلي و idempotent الخصائص الدلالية البيانات ، أيأن البيانات التي يمكن إعادة ترتيب وتكرار دون تغيير المعنى.على سبيل المثال ، بيانات تعيين قيم اسمه المجالات يمكن إعادة ترتيب وتكرار دون تغير معنى من البرنامج ، إذا كانت هذه الأسماء هي وحدات ث.r.t.إلى أي ضمنية النظام.أسماء بعض الأحيان يعني النظام ، على سبيل المثالخلية معرفات إدراج الصفوف والأعمدة موقف الحركة الإجمالية على جدول يتغير معناها.وإلا فإن هذه الخصائص تتطلب ضمنيا العالمية الاتساق من دلالات.فمن المستحيل عموما تصميم دلالات التصريحات حتى تظل متسقة إذا أمرت عشوائيا أو تكرار ، لأن النظام الازدواجية تشكل جزءا لا يتجزأ من دلالات.على سبيل المثال بيانات "فو موجود" (أو البناء) و "فو لا وجود له" (وتدميرها).إذا كان أحد يرى عشوائية التناقض endemical المقصود دلالات ، ثم أحد يقبل هذا التعريف العام يكفي التعريفي الملكية.في جوهر هذا التعريف هو باطل كما المعمم التعريف لأنه محاولات لجعل الاتساق متعامد دلالات ، أيتتحدى حقيقة أن الكون من دلالات هو حيوي غير محدود و لا يمكن القبض عليه في العالمية الاتساق النموذج.

تتطلب تبادلي idempotent خصائص (التقييم الهيكلي ترتيب) أقل من المستوى التشغيلي دلالات يحول التنفيذية دلالات على التعريفي مترجمة وحدات دلالية مثلا نقية البرمجة الوظيفية (بما في ذلك الإعادة بدلا من الضروري حلقات).ثم التشغيلية من أجل تنفيذ تفاصيل لا تؤثر (أيانتشار على الصعيد العالمي في) من التناسق أعلى مستوى دلالات.على سبيل المثال ، من أجل تقييم (نظريا أيضا ازدواجية) جدول الصيغ لا يهم لأن النواتج يتم نسخ إلى المدخلات حتى بعد كل النواتج تم حسابها ، أيمماثلة نقية وظائف.

C, Java, C++, C#, PHP و جافا سكريبت ليست خاصة التعريفي.Copute جملة و جملة بايثون أكثر إلزامي بالإضافة إلى النتائج المرجوة, أييتفق النحوية دلالات القضاء على دخيلة لذلك يمكن للمرء بسهولة فهم رمز بعد لقد نسيت ذلك.Copute و هاسكل فرض الحتمية التنفيذية دلالات وتشجيع "لا تكرر نفسك"(جافة) لأنها تسمح فقط الوظيفية البحتة النموذج.


2 حتى حيث يمكننا إثبات دلالات برنامج مثلمع اللغة Coq ، وهذا يقتصر على دلالات التي يتم التعبير عنها في الكتابة, و الكتابة لا يمكن أبدا القبض على كل من دلالات برنامج— ليس حتى اللغات التي لا تورينج كاملة ، على سبيل المثالمع HTML+CSS فمن الممكن أن أعرب عن تتعارض تركيبات مما قد غير معرفة دلالات.

3 العديد من التفسيرات غير صحيح ادعاء فقط لا بد البرمجة نحويا أمرت البيانات.لقد أوضحت هذه الخلط بين حتمية البرمجة الوظيفية.على سبيل المثال ، من اجل HTML البيانات لا يقلل من اتساق معانيها.


تحرير:نشرت لي التعليق التالي روبرت هاربر بلوق:

في البرمجة الوظيفية ...مجموعة من التباين في متغير نوع

اعتمادا على كيفية واحد يميز وظيفية من الضروري البرمجة الخاصة بك 'التنازل' في البرنامج الضروري أيضا قد يكون نوع وضع ملزمة على التغير.

فقط غير مشوش التعريف أنا حاليا نقدر الوظيفي البرمجة هي) وظائف من الدرجة الأولى الأجسام وأنواعها ، ب) تفضيل العودية على الحلقات و/أو ج) النقي وظائف— أيتلك الوظائف التي لا أثر المطلوب دلالات البرنامج عندما memoized (وبالتالي نقي تماما وظيفية البرمجة لا وجود لها في الغرض العام denotational دلالات بسبب التأثيرات التشغيلية دلالات على سبيل المثالالذاكرة تخصيص).

على idempotent ممتلكات نقية وظيفة يعني استدعاء دالة على لها المتغيرات يمكن أن تكون بديلا من قيمته ، والتي ليست بشكل عام حالة حجج حتمية الإجراء.نقية وظائف يبدو أن التعريفي ث.r.t.إلى uncomposed التحولات الدولة بين المدخلات نتيجة أنواع.

ولكن تركيبة نقية وظائف لا يحتفظ بأي من هذه الاتساق, لأنه من الممكن أن نموذج الآثار الجانبية (العالمي الدولة) الضروري في عملية النقي وظيفية لغة البرمجة ، على سبيل المثالهاسكل IOMonad وعلاوة على ذلك فإنه من المستحيل تماما أن منع يفعل مثل هذا في أي تورينج كاملة نقية البرمجة الوظيفية اللغة.

كما كتب في عام 2012 والتي يبدو إلى إجماع مماثل من تعليقات في الخاص بك بلوق الأخيرة, أن التعريفي البرمجة هو محاولة للقبض على فكرة أن المقصود دلالات أبدا مبهمة.أمثلة من دلالات مبهمة هي الاعتماد على النظام ، الاعتماد على محو أعلى مستوى دلالات في العمليات دلالات طبقة (مثلا ، يلقي ليست التحويلات تتحقق الوراثة حد أعلى مستوى دلالات), و الاعتماد على متغير القيم التي لا يمكن التحقق منها (ثبت في الصحيح) عن طريق لغة البرمجة.

وهكذا أكون قد انتهيت من هذا فقط غير تورينج كاملة اللغات التعريفي.

وبالتالي واحدة لا لبس فيها و متميزة السمة التعريفي اللغة يمكن أن انتاجها يمكن أن يثبت على طاعة بعض enumerable مجموعة من توليدي القواعد.على سبيل المثال ، أي HTML برنامج (تجاهل الاختلافات في طرق المترجمين تتباعد) التي لا كتابتها (أيلا تورينج كاملة) ثم انتاجها التباين يمكن enumerable.أو أكثر وضوحا HTML البرنامج هو محض وظيفة تقلب فيها.كما سبق برنامج جدول بيانات هو محض وظيفة من متغيرات المدخلات.

لذلك يبدو لي أن التعريفي لغات هي نقيض غير محدود العودية, أيفي Gödel الثاني عدم اكتمال نظرية المرجعي الذاتي النظريات لا يمكن إثباته.

Lesie لامبورت كتب رواية حول كيفية إقليدس قد عمل حول Gödel هو عدم اكتمال النظريات التطبيقية الرياضيات البراهين في لغة البرمجة السياق إلى التطابق بين أنواع المنطق (كاري-هوارد المراسلات ، إلخ).

انها طريقة البرمجة القائمة حول وصف ما شيء ما ينبغي القيام به أو يكون بدلا من وصف كيف يجب أن تعمل.

وبعبارة أخرى, لا كتابة خوارزميات مصنوعة من التعبيرات ، تخطيط فقط كيف تريد أن تكون الأمور.اثنين من الأمثلة الجيدة هي HTML و WPF.

هذه مقالة ويكيبيديا هو لمحة عامة جيدة: http://en.wikipedia.org/wiki/Declarative_programming

واصفا إلى جهاز كمبيوتر ما تريد, لا كيفية القيام بشيء ما.

لدي المكرر فهمي التعريفي البرمجة منذ ديسمبر 2011 عندما قدمت إجابة على هذا السؤال.هنا يتبع بلدي الفهم الحالي.

نسخة طويلة فهمي (البحث) هو مفصل في هذا الرابط, التي يجب أن تقرأ لاكتساب فهم عميق ملخص سوف نقدم أدناه.

البرمجة حتمية غير قابلة للتغيير حيث يتم تخزينها وقراءتها ، وبالتالي فإن الطلب و/أو تكرار تعليمات البرنامج يمكن تغيير السلوك (علم الدلالة) من برنامج (حتى تسبب الخلل ، أيالسلوك غير المرغوب فيه).

في أكثر من السذاجة الشديدة بمعنى (الذي أكد في بلدي قبل الإجابة) ، التعريفي البرمجة (DP) هو تجنب كل تخزين قابلة للتغيير الدولة ، وبالتالي فإن الطلب و/أو تكرار تعليمات البرنامج يمكن لا تغيير السلوك (علم الدلالة) من البرنامج.

ومع ذلك ، فإن مثل هذا المتطرفة التعريف لن تكون مفيدة جدا في العالم الحقيقي ، منذ ما يقرب من كل برنامج يتضمن تخزين قابلة للتغيير الدولة.على جدول سبيل المثال يتوافق مع هذا المتطرفة تعريف DP, لأن كامل رمز برنامج تشغيل الانتهاء مع واحد ثابت نسخ من مساهمة الدولة ، قبل أن يتم تخزينها.ثم إن أي دولة يتم تغيير هذا المتكررة.ولكن معظم العالم الحقيقي البرامج لا يمكن أن يقتصر على هذه متجانسة نموذج الدولة التغييرات.

وهناك تعريف أكثر فائدة DP هو أن يأمر و/أو تكرار تعليمات البرمجة لا يغير أي دلالات مبهمة.وبعبارة أخرى, ليس هناك الخفية تغييرات عشوائية في دلالات حدوث أي تغييرات في برنامج التعليمات و/أو الازدواجية يسبب المقصود فقط وشفافة برامج تغيير السلوك.

الخطوة التالية سيكون الحديث عن الذي نماذج البرمجة أو النماذج المساعدة في DP, ولكن ليس هذا هو السؤال هنا.

التعريفي البرمجة البرمجة مع الإعلانات ، أيالجمل التقريرية.الجمل التقريرية لديها عدد من الخصائص التي تميزها عن حتمية الجمل.ولا سيما الإعلانات:

  • تبادلي (يمكن إعادة ترتيب)
  • النقابي (يمكن تجميعهم)
  • idempotent (يمكن تكرار دون تغيير في المعنى)
  • رتيب (الإعلانات لا طرح المعلومات)

ذات الصلة نقطة هي أن كل هذه الخصائص الهيكلية و متعامد الموضوع.التعريفي ليس عن "ما مقابلكيف".يمكن أن نعلن (تمثل وتقييده) ، "كيف" تماما كما بسهولة كما نعلن "ما". التعريفي حول الهيكل ، وليس المحتوى. التعريفي البرمجة لديها تأثير كبير على كيفية مجردة ريفاكتور رمز لنا ، وكيفية modularize في subprograms ، ولكن ليس كثيرا على نموذج المجال.

في كثير من الأحيان يمكننا التحويل من الضروري التعريفي بإضافة السياق.E. g.من "اتجه إلى اليسار.(...انتظر ...) يمينا." إلى "بوب سوف يسارا عند تقاطع فو وبار في 11:01.بوب سوف تتحول الحق في تقاطع شريط باز في 11:06." علما أنه في هذه الحالة الأخيرة الجمل idempotent و تبادلي ، في حين أنه في الحالة الأولى إعادة ترتيب أو تكرار الجمل سوف بشدة تغيير معنى البرنامج.

فيما يتعلق رتيب, الإعلانات يمكن أن تضيف القيود الذي طرح الاحتمالات.ولكن قيودا لا تزال إضافة معلومات (على نحو أدق ، القيود المعلومات).إذا نحن بحاجة إلى وقت متفاوتة الإعلانات, ومن المعتاد أن نموذج هذا مع صريح الزمنية دلالات - على سبيل المثال ، من "الكرة شقة" أن "الكرة مسطحة في الوقت T".إذا كان لدينا اثنين متناقضة الإعلانات لدينا غير متناسقة التعريفي النظام, على الرغم من أن هذا قد يكون حلها عن طريق إدخال لينة القيود (الأولويات ، الاحتمالات ، إلخ.) أو الاستفادة من paraconsistent المنطق.

التعريفي البرمجة هو "قانون البرمجة في لغات التي تتوافق مع العقلية النموذج المطور بدلا من النموذج التشغيلي للآلة".

الفرق بين التعريفي و البرمجة حتمية جيدا يتضح من تحليل البيانات المهيكلة.

وهو البرنامج الضروري استخدام متبادل وظائف العودية تستهلك الإدخال وتوليد البيانات.التعريفي البرنامج عن القواعد التي تحدد هيكل البيانات بحيث يمكن بعد ذلك تحليل.

الفرق بين الطريقتين هو أن البرنامج التعريفي يخلق لغة جديدة أكثر عن كثب تعيين العقلية نموذج المشكلة من مضيفه اللغة.

قد يبدو الأمر غريبا ، ولكن أود إضافة Excel (أو أي جدول حقا) إلى قائمة التعريفي النظم.وخير مثال على ذلك هو إعطاء هنا.

كنت سأشرح الأمر كما DP هو وسيلة للتعبير عن

  • A الهدف التعبير, وشروط ما تبحث عنه.هل هناك واحد أو كثير ؟
  • بعض الحقائق المعروفة
  • القواعد التي تمتد تعرف الحقائق

و حيث يوجد خصم المحرك عادة تعمل مع التوحيد خوارزمية لإيجاد أهداف.

بقدر ما استطيع ان اقول ، بدأت تستخدم لوصف نظم البرمجة مثل Prolog, لأن prolog هو (المفترض) معلنا عن أشياء مجردة.

متزايدة يعني القليل جدا ، كما أنه يحتوي على تعريف المستخدمين أعلاه.وينبغي أن يكون واضحا أن هناك فجوة بين التعريفي برمجة هاسكل ، ضد التعريفي البرمجة HTML.

بضعة أمثلة أخرى من التعريفي البرمجة:

  • ASP.Net العلامات ربط البيانات.هو فقط يقول "ملء هذه الشبكة مع هذا المصدر" ، على سبيل المثال ، ويترك نظام كيف يحدث ذلك.
  • Linq التعبير

التعريفي البرمجة هو لطيف لأنه يمكن أن تساعد تبسيط النموذج العقلي* من التعليمات البرمجية ، لأنه قد يكون في نهاية المطاف أكثر قابلة للتطوير.

على سبيل المثال, دعونا نقول لديك وظيفة أن لا شيء إلى كل عنصر في مجموعة أو قائمة.التقليدية رمز تبدو مثل هذا:

foreach (object item in MyList)
{
   DoSomething(item);
}

لا صفقة كبيرة هناك.ولكن ماذا لو كنت تستخدم أكثر التعريفي الجملة بدلا من ذلك تحديد DoSomething() كما عمل ؟ ثم يمكنك أن تقول ذلك بهذه الطريقة:

MyList.ForEach(DoSometing);

هذا هو بالطبع أكثر إيجازا.ولكن أنا متأكد من أن لديك المزيد من المخاوف من مجرد توفير سطرين من التعليمات البرمجية هنا وهناك.الأداء على سبيل المثال.الطريقة القديمة وتجهيزها كان ينبغي القيام به في تسلسل.ما إذا كان .ForEach() طريقة كانت وسيلة بالنسبة لك للإشارة إلى أنه يمكن التعامل مع معالجة بالتوازي تلقائيا ؟ الآن فجأة قمت بها الكود الخاص بك متعددة الخيوط بطريقة آمنة جدا و فقط تغيير سطر واحد من التعليمات البرمجية.و في الواقع هناك أحد تمديد ل .شبكة الإنترنت التي تمكنك من فعل ذلك.

  • إذا كنت تتبع هذا الرابط يأخذك إلى بلوق وظيفة من قبل صديق لي.كل بوست طويل قليلا ولكن يمكنك التمرير لأسفل إلى العنوان بعنوان "المشكلة" _and يستلم هناك أي مشكلة.*

ذلك يعتمد على كيفية تقديم الجواب على النص.عموما يمكنك إلقاء نظرة على البرنامج في رأي معين ولكن الأمر يعتمد على الزاوية التي ننظر المشكلة.سوف تبدأ مع البرنامج:خافت حافلة, سيارة, الوقت, ارتفاع Integr

مرة أخرى هذا يعتمد على ما هي المشكلة عموما.قد يكون تقصير بسبب البرنامج.ويساعد هذا الأمل و تحتاج ردود الفعل إذا كان لا.شكرا لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top