F#でのArcObjectsの使用に関する@ray vernagusの投稿を読んだ後、疑問に思っていました... より伝統的な形式のプログラミングとは対照的に、関数型プログラミングではどのような種類のGIS問題がより適切に処理されますか?
おそらくより具体的には、ArcObjectsでC#を使用するよりも、F#を使用した方がよい場合はいつですか?
R
とMathematicaに存在し、GIS関連の例が数多く提供されています。
F#でのArcObjectsの使用に関する@ray vernagusの投稿を読んだ後、疑問に思っていました... より伝統的な形式のプログラミングとは対照的に、関数型プログラミングではどのような種類のGIS問題がより適切に処理されますか?
おそらくより具体的には、ArcObjectsでC#を使用するよりも、F#を使用した方がよい場合はいつですか?
R
とMathematicaに存在し、GIS関連の例が数多く提供されています。
回答:
関数型プログラミングが最近流行している最大の理由は、同時実行性です。パフォーマンス上の理由から並列処理を実行できることは、全体的なコンピューティングにおいて非常に重要になり、GISも例外ではありません。関数型プログラミングは、不変性と再帰をどれだけ強調するかによって、並列システムを作成する上でいくつかの重大な利点があります。これらの特性のため、ほとんどの関数型言語は、ロックなどの問題を単純に回避する傾向があり、命令型言語での並列プログラミングは大きな頭痛の種になります。
そうは言っても、関数型プログラミングが提供する多くの機能を実際に活用できるようになるまでには、GIS分野には長い道のりがあると思います。既存のテクノロジーとライブラリは、オブジェクト指向と一般的に必須のアプローチにあまりにも固執しています。悲しいことに、F#からArcObjectsを使用できるからといって、基盤となるライブラリが実際に機能的なプログラミングスタイルで実際にうまくいくとは限りません。
厳密にはプログラミングではありませんが、ArcToolboxはより機能的な設計パラダイムに従っています。
ArcToolboxの機能的アプローチにより、コードを記述することなく空間分析を行うことができます。ユーザーは、レイヤーなどの単純な要素のセットで作業でき、反復、状態の維持、複雑な副作用について心配する必要はありません。
私は関数型プログラミングを初めて使用するので、これらはほんの一部の考えです。
F#のレイトレーサーの興味深い例は、関数型プログラミングの長所、つまり高次関数、再帰、並列処理、パターンマッチングなどを示しています。これらの概念の一部を拡張すると、関数型プログラミングが特に適している可能性があるGISの重要な領域の1つとして、ラスター演算が考えられます。
編集:これは同じサイトからの別の例です:Rule 30 Cellular Automata
もう1つの考えは、F#でプログラム全体を記述する必要がないということです。メインプログラムをC#で記述し、特定の関数型プログラミングの問題を解決するプロジェクト/アセンブリをF#で作成できます。ILMergeを使用してC#とF#を1つの実行可能ファイル/アセンブリにマージすることもできます。
最後に、あなたがC#で行うことができます関数型プログラミングのものがたくさんありますLINQの使用を通じて、ラムダ式、高階関数(Select
、Where
などなど)、シーケンスパターンマッチングは、