宣言型プログラミングに関して、私がその概念をどれだけよく理解しているかを確認するために質問があります。私には、Javaで数独パズルソルバーを「宣言型の方法」で作成する必要があるという課題があります。それが何を意味するのかを調べてみると、プログラムは、方法を指定するのではなく、何をしなければならないかを説明するような方法で作成する必要があるというあいまいな定義がたくさん見つかりました。周りを見回すと、誰かがリストでそれを説明している、具体的にはリストの奇数をフィルタリングしているという興味深い例を見つけました。
命令型(関数と呼ばれる):
List resultList = new List()
foreach element in startlist
do if element % 2 == 1
do add element to resultList
od
od
return returnList
宣言型(呼び出しコンテキスト):
newList = startList.filter(num -> num%2 ==1)
したがって、宣言型では、保持する要素が指定されますが、リストの作成方法は指定されません。これは、リストのAPIに抽象化されています。
私の簡単な質問は次のとおりです。このアプローチは、アルゴリズムがそこに移動されるため、リストのライブラリが宣言型ではないことを意味しませんか?その場合、「宣言型」という用語は、このライブラリを呼び出すプログラムの部分に適用されます。したがって、プログラムが100%宣言型であるのは不可能ではありません。(もちろん)どこかで、物事がどのように行われるかを指定するアルゴリズムが必要になるからです。私がここで間違っている場合は、これが宣言型の概念の理解の中心になるので、私を訂正してください。
いずれにせよ、私は数独ソルバーを自分のライブラリー(「宣言型」関数プログラミングスタイルにラップされたすべての「命令型」ロジックを含む)と、数独ソルバーを解決するために実行する必要のある手順の仕様を組み合わせて作成することを考えていました。数独、これらのライブラリへの呼び出しとして。また、ソルバークラスをさらに「宣言型」にするために、Javaで関数を引数として渡す方法のラッパーとしてコマンドパターンを使用できると考えていました。私はすでにこれを試し、関数を持つコマンドを使用して、リストから要素を引数として取得し、要素が結果リストから保持または破棄される場合はtrueまたはfalseを返すという行に沿って何かを試しnewList = startList.filter(new OddNumberCommand())
ましOddNumberCommand
たexecute
。
とにかく、これは私の心が回転する方法であり、私が正しい道を進んでいるか間違った道を進んでいるかを確認するために、この概念をよりよく理解している他の人の助けに頼りたいと思いました。宣言型プログラミングの適切な使用法を学ぶことができるように、私がどこが間違っているのか、そして私の推論の何が正しいのかを教えてください。
ありがとう