web-dev-qa-db-ja.com

R / SASのような統計プログラミング言語は関数型または手続き型と見なされますか?

読んだ後も違いがわかりません this

したがって、関数型プログラミングと手続き型プログラミングの違いを尋ねるのではなく、私が精通している言語が例として役立つのではないかと思いました。

したがって、私の質問:言語R/SASは手続き型または機能的と見なされますか?

15
Victor

Rは主に関数型プログラミング言語です。副作用を介して行われるいくつかの例外があるため、Haskellほど完全には機能しません。それでも、関数を使用するようにプログラミングスタイルを適応させたくない場合は、効率的なRコードを作成するのがかなり困難になります。 (私がこの答えを書いている唯一の理由は、Rをオブジェクト指向言語と呼ぶことは、Javaの場合と同じ方法で関数メッセージをデータオブジェクトに送信できることを期待している人々にとって誤解を招くことになるからです。 Rは、オブジェクトのクラスを「汎用」関数のディスパッチ選択メカニズムとして使用しますが、これは完全なオブジェクト指向言語と同じパラダイムではありません。)

Rには、それらと関連する関数タイプについての考え方に応じて、3つ、4つ、または5つの主要なオブジェクトクラスがあります。複数の引数シグネチャでディスパッチする可能性のあるS4クラスは、BioConductorの世界で広く使用されていますが、最初の引数のクラスでのみディスパッチする元のS3関数はおそらく依然として最も一般的に使用されています。参照クラスまたはR5またはプロトクラスのオブジェクトは、真のオブジェクト指向プログラミングデータ型に最もよく似ています。私は彼らとの経験があまりないので、その最後の文で少し曖昧になっています。

SASは主に手続き型言語です。関数を定義することはできますが、少なくとも最初は、ほとんどの人がSASとそのデータセットを操作する方法ではありません。少なくとも15年前に使用したときは、実際にはありませんでした。オブジェクトモデル。その主な利点は、「レポート作成」の優れたサポートであると私は主張します。

(データ操作が「Rでは難しい」というコメントは、経験不足を示しているだけです。Rでのデータ操作に必要なコードの量は、私のSAS同僚が使用するコードよりもはるかに少ないです。 。SASでプログラミングを開始した場合、変換は困難になりますが、変更した私たちの人々は一般的にRに固執しています。)

22
42-

Rは間違いなく手続き型だと思います。関数型プログラミングは、関数を利用するだけではありません。たとえば、粗いモジュール性を使用します。確かにf.p. extremeモジュール性に取り組んでいます。これはその主要な強みの1つです。詳細については、JohnHughesによる古典的な論文「関数型プログラミングが重要である理由」を参照してください。

SASは、データをテーブルに整理し、それに関する統計レポートを作成するように設計されている私にとって、より特別な目的のようです。関数型プログラミングとは特に関係がないようです。私はまだその手続き能力(またはその欠如)を調査しています

0
Rogue