R 語言筆記》一切運算皆是函數調用

最近在讀《高級 R 語言編程指南》(Advanced R) 這本書,讀到第 6 章時,發現 R 的語法其實很有趣,有些 Lisp 的味道 🙂

在 R 裡頭:

  • 一切皆是物件 (object)
  • 一切運算皆是函數調用

所以像是四則運算 (+-*/) 等符號也是函數 (屬於 中綴函數)。

然後,我們可以像這樣使用四則運算符,讓四則運算符以 前綴函數 的方式調用:

> `+`(2, 3)
[1] 5
> `*`(5, `+`(2, 3))
[1] 25
>

接下來,我們可以來惡搞一下 R:

> `(` <- function(e) e + 1
> `*`(5, (3 + 2))
[1] 30
> (3 + 2)
[1] 6
> (3 * 2)
[1] 7
> 

惡搞完 ( 符號後,接下來玩弄一下 + 運算符… XDD:

> add <- `+`
> add(2, 3)
[1] 5
> add(2, 100)
[1] 102
> `+` <- function(e1, e2) {
+   x <- add(e1, e2)
+   if (x <= 87) {
+     x
+   } else {
+     x <- 87
+     cat("87分不能再高了!\n")
+     x
+   }
+ }
> 
> 2 + 3
[1] 5
> 5 + 81
[1] 86
> 2 + 100
87分不能再高了!
[1] 87
> 2 + 10000
87分不能再高了!
[1] 87
> 

根據維基百科上的描述,R 的語法結合了 S 語言與 Scheme,經過上述的惡搞法後,各位有沒有感受到 R 有一點點 Lisp 的 () 味道呢? XD (Lisp 粉絲不要戰我)