最近在讀《高級 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 粉絲不要戰我)