一つ目
I.HAVE.A = I.HAVE.AN = function(x) x
cat(rev(c(c(I.HAVE.A("PEN"), I.HAVE.AN("APPLE")),
rev(c(I.HAVE.A("PEN"), I.HAVE.A("PINEAPPLE"))))))
二つ目...わざわざ複雑そうに
PPAP = function(s, t, u, v) {
cat1 = function(s, ...) cat(toupper(substr(s, 1, 1)), ...)
cat2 = function(s) cat(sprintf("I have a%s %s.", ifelse(grepl(tolower(substr(s, 1, 1)), "aiueo"), "n", ""), s), "\n")
cat3 = function(s) {cat2(s[1]); cat2(s[2]); cat(s[2:1], ".\n")}
sapply(c(s, t, u, v, "\n"), cat1)
sapply(list(c(s, t), c(u,v)), cat3)
cat(sprintf("%2$s %1$s, %4$s %3$s.\n", s, t, u, v))
cat(sprintf("%3$s %4$s, %2$s %1$s!\n", s, t, u, v))
}
PPAP("pen", "apple", "pen", "pineapple")
PPAP("ball", "baseball", "pen", "pencl")