Menu
Coddy logo textTech

החזרת פונקציות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 29 מתוך 64.

פונקציה יכולה גם להחזיר פונקציה. make_multiplier(3) מחזירה פונקציה חדשה שמכפילה את הארגומנט שלה ב-3:

make_multiplier <- function(n) {
  function(x) x * n
}
triple <- make_multiplier(3)
print(triple(5))
print(make_multiplier(10)(5))

פלט:

[1] 15
[1] 50

הפונקציה המוחזרת זוכרת את הערכים שאיתם היא נבנתה. השילוב הזה של פונקציה והמשתנים שסביבה נקרא סגירה. כל קריאה לפונקציה היוצרת בונה סגירה נפרדת:

make_greeter <- function(greeting) {
  function(name) paste0(greeting, ", ", name, "!")
}
hello <- make_greeter("Hello")
hola <- make_greeter("Hola")
print(hello("Ada"))
print(hola("Ada"))

פלט:

[1] "Hello, Ada!"
[1] "Hola, Ada!"

פונקציית יצרן הופכת כמה הגדרות לכלי מוכן לשימוש, למשל ממיר בין יחידות:

make_converter <- function(factor, offset = 0) {
  function(x) x * factor + offset
}
c_to_f <- make_converter(1.8, 32)
km_to_miles <- make_converter(0.621)
print(c_to_f(100))
print(km_to_miles(10))

פלט:

[1] 212
[1] 6.21

אפשר לשלב פונקציות ליצירת פונקציות חדשות. compose(f, g) מחזירה פונקציה שמריצה את f ואז את g:

compose <- function(f, g) function(x) g(f(x))
clean <- compose(trimws, toupper)
print(clean("  hi there "))

פלט:

[1] "HI THERE"
challenge icon

אתגר

קל

השלם את make_formatter(prefix, digits). היא מחזירה פונקציה שמקבלת מספר ומחזירה את prefix ואחריו המספר עם digits ספרות אחרי הנקודה העשרונית: make_formatter("$", 2)(3.5) מחזירה $3.50.

sprintf("%.*f", digits, x) מעצבת את x עם digits ספרות אחרי הנקודה העשרונית.

הקוד שסופק קורא את הקידומת, את מספר הספרות אחרי הנקודה העשרונית ורשימה של מספרים המופרדים בפסיקים. הוא יוצר מעצב אחד ומדפיס את התוצאה שלו עבור כל מספר.

נסו בעצמכם

make_formatter <- function(prefix, digits) {
  # כתבו כאן את הקוד שלכם
  function(x) ""
}

# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
fmt <- make_formatter(input[1], as.integer(input[2]))
for (x in as.numeric(strsplit(input[3], ",")[[1]])) cat(fmt(x), "\n", sep = "")
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר R אונליין