Menu
Coddy logo textTech

Fonksiyonları Geçirme

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 28 / 64.

Bir fonksiyon, başka bir fonksiyonu argüman olarak alıp onu çağırabilir. Aşağıdaki apply_twice(), tek argüman alan herhangi bir fonksiyonla çalışır:

apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))

Çıktı:

[1] 16
[1] "OK"

sum, max veya toupper gibi yerleşik işlevler de değerdir; bu nedenle onları parantez olmadan adlarıyla geçirin. Parantezlerle ise çağrılırlar:

summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))

Çıktı:

[1] 9
[1] 15

predicate alan, TRUE veya FALSE döndüren bir işlev, değerleri herhangi bir kurala göre sayabilir veya seçebilir:

count_if <- function(xs, keep) {
  n <- 0
  for (x in xs) if (keep(x)) n <- n + 1
  n
}
print(count_if(c(3, 8, 10, 5), \(x) x %% 2 == 0))
print(count_if(c(3, 8, 10, 5), \(x) x > 4))

Çıktı:

[1] 2
[1] 3

Çağıran davranışı belirler ve işlev döngüyü sağlar; böylece tek bir işlev birçok durumu kapsar:

transform_each <- function(xs, f) {
  out <- c()
  for (x in xs) out <- c(out, f(x))
  out
}
print(transform_each(1:4, \(x) x * 10))
print(transform_each(c("a", "b"), toupper))

Çıktı:

[1] 10 20 30 40
[1] "A" "B"
challenge icon

Görev

Kolay

apply_n(f, x, n) işlevini tamamla. f işlevini x üzerinde, ardından sonuç üzerinde toplam n kez çağır ve son değeri döndür. n 0 olduğunda, x değerini değiştirmeden döndür.

Sağlanan kod üç işlev tanımlar: double, inc ve half. Bunlardan birinin adını, başlangıç değerini ve n değerini okur ve apply_n() sonucunu yazdırır.

Kendin dene

apply_n <- function(f, x, n) {
  # Kodunuzu buraya yazın
  x
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
ops <- list(double = \(x) x * 2, inc = \(x) x + 1, half = \(x) x / 2)
cat(apply_n(ops[[input[1]]], as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi