2009-08-06 4 views
21

解決策を定義するのではなく、特定の問題の解決策を定義するように設計されたプログラミング言語はありますか?したがって、ソリューションまたは最終結果がどのように見えるかを定義し、言語インタープリタがその結果にどのように到達するかを決定します。 list of programming languagesを見ると、これを調べ始める方法もわかりません。ソリューションの代わりに問題を定義するプログラミング言語?

私は現在、私が尋ねようとしていることを説明するのに役立つと思われる最良の例は、SQLとMapReduceですが、それらはどちらもデータを検索するために設計されたミニ言語です。しかし、SQL文またはMapReduce文を書くときは、最終結果を定義しており、DBは最終結果セットに到達するための最善のアクション・コースを決定します。

これらの種類の言語が存在する場合、多くのデータを処理したり、一連の方程式の解を見つけるのに使用できます。夢の言語は、定義された問題を解釈し、どの部分が並列化可能であるかを識別し、複数のプロセス/コア/ボックスにわたってソリューションを実行できる言語です。

+0

質問を愛し、私が答えを持っていればよかった! –

+0

これは、仕様言語と同じように、問題を私に移してしまう別のアイデアのように思えます:)このようなものを作成すると、多くのパワーを失うことになります(SQLとMapReduceは汎用性の高いもので、あなたが置き換えようとしているものほど複雑なものです。 – workmad3

+0

@ workmad3:これらの種類の言語は専門的であるか、あまりにも馬鹿馬鹿しく不必要に複雑になり、実用には至りません。それでも、そのような言語のためにそこにニッチがあるように思えますし、私たちが試してみるまで、それらが実行可能かどうかはわかりません。 –

答えて

30

Declarative Programming? Wikipediaの記事からの抜粋(強調は追加):コンピュータサイエンスの

、宣言 プログラミングはが 制御フローを記述することなく、 計算ロジックを発現することプログラミングパラダイム あります。 にこのスタイルの試みを適用する多くの言語は 最小化またはプログラムが が達成すべきかを記述するのではなく、それを達成について移動する方法を説明し による副作用を排除します。この は、命令語 とは対照的に、 明示的に指定されたアルゴリズムが必要です。

+0

ああ、それは私がハハを必要とする用語です。私はあなたが検索/尋ねる言葉を知らないときには嫌です。また、「宣言的なプログラミングは最近注目されています。並列プログラムの作成を大幅に簡素化できるため、私は一人ではないようです。 –

+0

+1 - まさに私が提案しようとしていたもの – Draemon

14

Prologなどの論理言語を使用すると、このようなものに最も近づくことができます。これらの言語では、問題の論理をモデル化しますが、やはり魔法ではありません。

+1

魔法の要素のために、これが実際にどのように見えるか想像するのは難しいです。どのくらいの魔法はあまりにも多いですか?しかし、Prologは素晴らしい例のように見えます。 –

+0

これはまさに私が質問を読んだときに考えた例です。しばらくの間Prologを使用した後、このパラダイムがまれにしかエミュレートされない理由も理解できます。 – Beska

12

これは、宣言型言語(具体的にはロジックプログラミング言語)の説明のように聞こえます。最もよく知られている例はPrologです。 Prologが並列化可能かどうかはわかりません。

私の経験では、Prologは制約充足問題(条件を満たす必要のある条件があるもの)を解決するのに最適です - 入力セットを定義し、制約を定義します(例えば、病理学的ケースが可能であり、論理的控除プロセスが完了するまでに非常に時間がかかることがあります。

問題をブール式で定義できる場合、SATソルバを投げることができますが、3SATの問題(3変数句によるブール変数の割り当て)はNP完全であり、数量論の兄弟である数量化された論理式の問題(存在量限定子と汎用量子を使用する)はPSPACE完全です。

OCamlや他のFP言語で書かれたいくつかの非常に良い定理証明者があります。 hereは、それらの全体の束です。

もちろん、シンプレックス法による線形プログラミングがあります。

+1

Prologは非常に並列化が可能です。条項の評価の順序は、どの順序でも、同時に実行することができます。 –

+0

私はこれまでシングルプロセッサマシンでしか使用していません。データポイントありがとう! –

3

私は答えをしようとしましょう... Prologあなたのニーズに答えることができるかもしれません。

4

これらの言語は、一般に5th generation programming languagesと呼ばれます。私がリンクしているWikipediaのエントリにはいくつかの例があります。

+0

"世代"という意味でプログラミング言語が分類されていることを聞いたことがないとき、どのくらい一般的なのでしょうか? – erjiang

0

宣言型プログラミングを可能にするさまざまなJavaベースのルールエンジンがあります。Droolsは私が試したものですが、かなり面白いようです。

2

私はあまりにも客観Camlの(OCamlのを)言うでしょう...言語の

0

多くは(真剣にこれを取ることはありません)のソリューションよりも多くの問題を定義します。

:Prologと宣言的に設計されたさまざまな種類のDSLに対してもう1つ投票してください。

0

私は大学時代にDNAを使って計算について何かを覚えていました。あなたは、問題のセグメントを表すソリューションにDNAのセグメントを置き、DNAが合っていればそれが有効な解決策になるように定義します。その後、化学物質の特性を利用して問題を解決し、ソリューションを表す完成したストランドを探します。あなたが参照しているもののように聞こえる。

私はそれが理論的なのか、それともやったのか思い出さない。

+0

あなたがそれを見つけることができれば、それは非常に興味深く読むことになるでしょう。 –

+0

この講演の前に、私はぶらぶらしていたかもしれないと思う。計算を行うために実際のDNAを使用することについての言及を見つけることができません。 – quillbreaker

+0

「生物学的コンピューティング」または「バイオコンピュータ」を探します。 http://news.nationalgeographic.com/news/2003/02/0224_030224_DNAcomputer.html http://en.wikipedia.org/wiki/Biocomputers – outis

1

これは不気味なように見えるかもしれませんが、その意味では、stackoverflowが何であるかです。あなたは問題や意図した結果を宣言し、コミュニティーは通常コードで解決策を提供します。

ダイナミックオープンシステムを有限数のソリューションにモデル化することは非常に難しいようです。私は、ほとんどのプログラミング言語が不可欠である理由があると思います。言い換えれば、暗闇の中で潜んでいるP = NP問題は、そのようなシステムをエンジニアにとって困難にさせる大規模な問題ではない。

興味深いのは、人為的な入力を活用してコードを生成する解決策を提供する正式なフレームワークがある場合です。インターネットとGoogleの検索エンジンは、そのツールの一種ですが、非常に原始的です。

大きな問題とソフトウェアは、基本的に単なるコードで解決された小さな問題の集まりです。だから、コードを生成したどのシステムでも、多かれ少なかれ原子解にマッピングできるかなり区切られた問題セットが必要になるでしょう。

0

LINQは、別の宣言型DSL(SQLに似ているという議論もあります)と見なすこともできます。繰り返しますが、ソリューションの外観を宣言し、LINQがそれを見つける方法を決定します。

これらの言語の美しさは、私が見つけたPLINQのようなプロジェクトがそれらの周りに湧き出ることができるということです。(WMVダイレクトリンク)でLINQ言語を変更せずにソリューションの検索を並列化する方法について説明しています。

1

Lisp。命令的命令ではなくルールに関して定義されているLispシステムは非常に多くあります。 Google ahoy ...

0

数学的プルーフはプログラミング言語を構成するものではありませんが、(非構造的プルーフを許可する限り)ソリューションを簡単に定義できる形式言語を形成します。もちろん、それはアルゴリズムではないので、「数学」は受け入れられる答えではないかもしれません。

関連する問題