日本語版WikipediaでR言語のことを調べると、「影響を受けた言語」という部分にS言語とSchemeが書かれています*1。S言語から大きく影響を受けたことはもちろんのことですが、なぜSchemeなのかと常々思っていました。プログラムを見てもSchemeのようなLISP族よりもC言語などのAlgol族に似ています。
今日、関数の書き方について本を読んでいると、「R言語は基本的に関数型言語である」という記述がありました。3+5という演算も、正式には
"+"(3, 5)
のように書くのだそうです。LISP族での
(+ 3 5)
と同様の前置記法だったのでした。シンタックス・シュガーとして中置記法が使えるようになっているとのこと。でも、それだけではAlgol系の
add(3, 5)
という関数呼び出しにそっくり、と言われてもしょうがないです。
遅延評価がなされるのもHaskellなどの関数型言語との共通点です。Schemeでは遅延評価ができるようにdelayという命令(フォーム?)が用意されていますね。もう少し調べると、R言語はSchemeと同じくレキシカル・スコープを採用していることも分かりました。
ただ、ここまでだと「Common Lispから影響を受けた」と書いてもいいような気もします。どの点がSchemeなんでしょうか? 小さい言語をライブラリで大きくしてゆく、という「思想」だったりして。
【2016年12月4日追記】
[R] R and Scheme
に、RとSchemeの共通点や相違点がまとめられていました。