読者です 読者をやめる 読者になる 読者になる

R言語のどこにSchemeが入っているのか

日本語版WikipediaR言語のことを調べると、「影響を受けた言語」という部分に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の共通点や相違点がまとめられていました。

*1:英語版WikipediaにはS言語しか書かれていませんが