Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدوال المجهولة

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 27 من 64.

في R، الدالة هي قيمة مثل الرقم أو السلسلة النصية. تنشئ function(x) x * 2 دالةً من دون إعطائها اسمًا، وقيمة تعبيرها الأخير هي ما تُعيده:

double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))

الناتج:

[1] 42
[1] 10

أضافت R 4.1 صيغة مختصرة: \(x) تعني الشيء نفسه مثل function(x). استخدم الأقواس المعقوفة عندما يحتاج جسم الدالة إلى عدة أسطر:

square <- \(x) x^2
label <- function(x) {
  size <- if (x > 10) "big" else "small"
  paste(x, "is", size)
}
print(square(4))
print(label(12))

الناتج:

[1] 16
[1] "12 is big"

بما أن الدوال قيم، يمكن للقائمة أن تحتوي على عدة دوال تحت أسماء. ‏ops[["inc"]] هي دالة، لذا فإن ‏ops[["inc"]](5) يستدعيها:

ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))

الناتج:

[1] 6
[1] "inc" "neg"

يمكن للدالة أن تتلقى عدة وسائط وتمنح بعضها قيماً افتراضية، تماماً مثل الدالة المُسمّاة:

area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))

الناتج:

[1] 9
[1] 15
challenge icon

التحدي

سهل

أكمل القائمة ops بثلاث دوال مجهولة ذات وسيط واحد:

  • تعيد double الوسيط مضروبًا في 2
  • تعيد square الوسيط مضروبًا في نفسه
  • تعيد negate الوسيط بعد عكس إشارته

يقرأ الكود المزوّد اسم عملية ورقمًا، ويستدعي تلك الدالة من ops ويطبع النتيجة.

جرّب بنفسك

ops <- list(
  # اكتب الكود الخاص بك هنا
  double = function(x) x
)

# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم R عبر الإنترنت