سؤال

يرجى ملاحظة ما يلي: من وظيفة "نقية"، وأنا لا أقصد "محض الظاهري"
أنا في اشارة الى هذا

إذا وظيفة "ما يلي:" بعض الدول العالمية، فهل هذا تلقائيا جعله نجس؟ أو أنها لا تعتمد على عوامل أخرى؟

إذا كان يجعله تلقائيا نجس، يرجى توضيح السبب.

إذا أنها تعتمد على عوامل أخرى، يرجى توضيح ما هم.

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

المحلول

وثمة وظيفة "نقية" هي وظيفة الذي يعتمد نتيجة <م> فقط على حجج مدخلاته. إذا كان يقرأ أي شيء آخر، وهي ليست وظيفة نقية.

نصائح أخرى

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

static int cache[256] = {0};
int compute_something(uint8_t input)
{
    if(cache[input] == 0)
        cache[input] = (perform expensive computation on input that won't return 0);
    return cache[input];
}

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

<اقتباس فقرة>   

وظائف مطلوبة الصرفة لبناء تعبيرات نقية. تعبيرات ثابتة هي محض من حيث التعريف.

وهكذا، إذا كان لديك "الدولة" العالمية لا تتغير انت بخير.

وانظر أيضا مرجعية الشفافية :

<اقتباس فقرة>   

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

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

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