سؤال

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

function WhatAmIDoing(args...)
   return function()
       return args
   end
end

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

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

المحلول

WhatAmIDoing هو العليا وظيفة لأنه هو الدالة التي ترجع وظيفة أخرى.

الشيء الذي يعود هو thunk — إغلاق خلق تأخر حساب القيمة الفعلية.عادة thunks يتم إنشاء بتكاسل تقييم تعبير (وربما memoize ذلك), ولكن في حالات أخرى, وظيفة هو ببساطة الحاجة في مكان العارية القيمة ، كما في حالة "constantly 5"،وهو في بعض اللغات ترجع الدالة التي يعود دائما 5.

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

WhatAmIDoing هو حقا تنفيذ "باستمرار" وظيفة كنت تصف.ولكن عموما لم يكن لديك للعودة فقط args في وظيفة الداخلية.هل يمكن العودة "ackermann(args)"،والتي يمكن أن تأخذ وقت طويل, كما في...

function WhatAmIDoing2(args...)
   return function()
       return ackermann(args)
   end
end

ولكن WhatAmIDoing2 سيعود فورا لأن تقييم أكرمان وظيفة ستكون معلقة في إغلاق.(نعم, حتى في مكالمة عن طريق قيمة اللغة.)

نصائح أخرى

في البرمجة الوظيفية وظيفة أن يأخذ وظيفة أخرى كحجة أو إرجاع وظيفة أخرى تسمى العليا وظيفة.

أود أن أقول أن XXXX ترجع إغلاق من اسمه وظيفة ملزمة على قيم x و y و z.

هذا ويكيبيديا المادة قد تلقي بعض الضوء

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

التخليل هو مصطلح ususally للدلالة على نوع من التسلسل.ربما لتخزين كائن بنيت من قيم متعددة.

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

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

شيء مشابه جدا يسمى constantly في Clojure:

http://github.com/richhickey/clojure/blob/ab6fc90d56bfb3b969ed84058e1b3a4b30faa400/src/clj/clojure/core.clj#L1096

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

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

(map (constantly 9) [1 2 3])
=> (9 9 9) 

أتساءل فقط لماذا تستخدم هذا ؟

مندوب?

أساسا أنت تعود وظيفة??أو الإخراج من وظيفة ؟

لم أفهم عذرا...

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