2017-06-05 14 views
3

私はちょうどプロローグについて学び始めました。なぜそれがbfsの代わりにdfsであり、それを簡単に変更することができないのか不思議でした。幅優先検索の代わりにプロローグ統一が深さ優先検索であるのはなぜですか?

ISOプロローグはそれを強制しますか?

+0

ツリーを「検索」すると、探しているものを見つけるとすぐに検索を停止することができます。つまり、「深さ優先検索」と「幅優先検索」の違いがあります。しかし、Prologは検索を行っていません。計算をしています。結果を得るためには完全な計算が必要なので、「深さ優先計算」と「幅優先計算」との違いはありません。 – Enigmativity

+0

あなたは本当に統一*の深みを最初に話していますか?これはあなたが意味することですか? – false

+0

「統一*深さ優先探索」であなたが描写しているものの例を挙げることができますか?または、木構造を検索する場合のように、一般的に深さの最初の検索を意​​味するだけですか? – lurker

答えて

2

まず、は、かなり変更が容易なです。ほとんどのPrologのテキストは、BFSを実行する述語を書く方法と、任意の言葉でそれを行うメタインタープリタを作成する方法の両方を説明しています。真実は、大学でPrologを味わう生徒が、Prologを使用した最初の1〜2週間を(基本的に)通過するということです。これを行うには、基本プロローグタスクではありませんが、アドバンスドプロローグテクニックでもありません。もしあなたがPrologに2ヶ月を費やしていたのであれば、それは威圧的なことではありません。それは多くのPrologのように聞こえるが、Javaと比べると実際はあまりありません。何らかの理由で、実際にはあまり面白くないシステムの場合よりもはるかに高速にPrologでフィニッシュラインに到達することが期待されます。

ISOが要求する検索戦略はSLD Resolutionと呼ばれ、深さ優先検索はこの解決メカニズムから生じると思います。私はISO規格を読んでいないので、おそらく誰かが私よりも情報を得ている人がコメントします。一方的に成功した計算が無限ループに入る可能性があるので、解決方法(したがって、深さ - 最初または幅 - 先)が必須ではない場合、Prologの標準化を管理するのは難しいと思います。通常のishプログラムの振る舞いを規定していない言語標準は、あまり貧弱な標準になります。ただし、別の検索戦略を指定するための組み込みができない理由はありません。

特にDFSを強制する理由はわかりません。しばらくの間、Prologを使用していたのですが、DFSではないという考えは私にとっては明らかに非効率的でした。たとえば、エッジケースを処理するコードをいくつか追加した場合は、BFSで毎回それを支払うつもりですが、DFSで必要な場合にのみ支払う予定です。私はDFSがより効率的なメモリになるように感じています。たとえば、おそらく無駄なコードパスを追跡する必要はありません。検索ツリーを簡単に整理できるので、DFSはおそらく制御が容易なように感じます。しかし、これはまさに感情です。多分私の自然な感覚は、私が使ったことの完全な結果です。 Prologの競争相手がBFSベースで存在していないことは、それが素晴らしい考えではないかもしれないという示唆の一種です。一方、1980年には非効率的だったものが、今日は状況が非常に異なっていても、今日もPrologの実装を知らせています。

関連する問題