تمرير الوظائف في F#
-
09-06-2019 - |
سؤال
هل من الممكن تمرير إشارة إلى دالة إلى دالة أخرى في F#؟على وجه التحديد، أود تمرير وظائف لامدا مثل
فو(متعة x -> x ** 3)
وبشكل أكثر تحديدًا، أريد أن أعرف كيف يمكنني الإشارة إلى الوظيفة التي تم تمريرها في وظيفة كتبتها بنفسي.
المحلول
نعم هذا ممكن.ال يدوي لديه هذا المثال:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
نصائح أخرى
الوظائف مواطنون من الدرجة الأولى في F #.لذلك يمكنك تمريرها تمامًا كما تريد.
إذا كان لديك وظيفة مثل هذا:
let myFunction f =
f 1 2 3
و F هي الدالة ثم القيمة المرجعة لـ myFunction يكون F تطبق على 1،2 و 3.
يعمل تمرير دالة لامدا إلى دالة أخرى على النحو التالي:
لنفترض أن لدينا وظيفة تافهة خاصة بنا على النحو التالي:
let functionThatTakesaFunctionAndAList f l = List.map f l
يمكنك الآن تمرير دالة lambda وقائمة إليها:
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
داخل وظيفتنا الخاصة functionThatTakesaFunctionAndAList
يمكنك فقط الرجوع إلى وظيفة لامدا باسم f
لأنك اتصلت بالمعلمة الأولى f
.
نتيجة استدعاء الوظيفة هي بالطبع:
float list = [1.0; 8.0; 27.0]