R是否允许运算符为复合表达式?

Mas*_*awa 5 functional-programming r

在Harold Abelson的"计算机程序的结构和解释"中,使用Lisp编程语言,其中一个练习要求您评估以下代码:

(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
Run Code Online (Sandbox Code Playgroud)

当然,一种方法R是:

APlusAbsB <- function(a, b){
  if(b > 0) a + b else a - b
}
Run Code Online (Sandbox Code Playgroud)

然后我重复as和bs.

我的问题是:是否R允许运算符为复合表达式(例如if (> b 0) + -))?例如,有没有办法做类似的事情

APlusAbsB <- function(a, b){  ## this doesn't work
  if(b > 0) "+" else "-" (a, b)    ## gives "+" or "-"
}
Run Code Online (Sandbox Code Playgroud)

MrF*_*ick 9

尝试

APlusAbsB <- function(a, b){
  (if(b > 0) `+` else `-`)(a, b)
}
Run Code Online (Sandbox Code Playgroud)

这里if将返回一个函数,然后用括号语法调用它.例如

APlusAbsB(1,5)
# [1] 6
APlusAbsB(1,-1)
# [1] 2
Run Code Online (Sandbox Code Playgroud)

  • 这种变化也有效:`a_plus_abs_b < - function(a,b)'if'('>'(b,0),'+',' - ')(a,b)`除了用反引号替换单引号 - 因此降价将反推是特别的. (2认同)