2016-04-30 6 views
0

最初の2つの段落を直ちに切断しても大丈夫ですが、ほとんどの状況を説明するワッフルです。Prolog:トレースに表示されるリストの最大長を調整するにはどうすればよいですか?

私は実際の問題を解決するための助けはしませんが(私はそれが「不正」であると感じています)、私は大学のコースの仕事に取り組んでいます。トレース時にプロローグに表示されるリストの長さ。たとえば、タスクでは、アルファベットからユニークな文字が割り当てられたノード間に色付きの「エッジ」を持つ迷路を通るパスを作成する必要があります。エッジは「双方向」であり、赤いエッジを介して「m」ノードにも接続する「開始」ノードがある。目標は、最初から赤、茶色、黄色の繰り返し順序でエッジに沿って進む間に、「g」ノードに到達することです。

とにかく、私のアルゴリズムは再帰の一番下に正しい経路を見つけると思いますが、トレーサを通過するのは何千ものステップです(私は終了する前に約2分間戻ります)。現在のところ、生成されたステップのリストを返すわけではありません。(そして、あなたの中にはそうする方法を教えてくれる人もいるかもしれませんが、実際にはプロローグを学ぶことが重要なので、私自身が感じています)、ルートステップのリストにあるものがトレース内にあることがわかる唯一の時間です。 SOここが問題である:

path(k, [red, brown, yellow], [[start, red], [m, brown], [e, yellow], [h, red], [r, brown], [p, yellow], [n|...], [...|...]|...], [start, m, e, h, r, p, n, j|...], g) 

最終的なリストは、私はそれが有効かどうかを知りたいルートを保持している、しかし:

[start, m, e, h, r, p, n, j|...] 

がjでオフカットし、私はトレースがFULL表示したいですそれ以外の場合は、経路の中に壊れた "正しい"ノードを見つけようとしている100秒間のトレースラインに戻る必要があります。バックトラックがたくさん混じっているので、間違いがあります。また、私はプログラムを使用しているので、これは正常ではないが、公式サイトからSWI-Prolog(マルチスレッド、バージョン7.2.3)を使用しています。これは、jノードに初めて到達したときに過去のことすべてを通過しなければならないことを意味します。これは膨大な時間を要します。

私が言うように、これは、リストが(返されたものとして)何かに統一されていれば解決できますが、私はそのスプーンのような答えを与えたくない自分自身でそれを理解することができます。だからあなたがそうする方法を知っているならば、私に言っておきましょう。トレースして最大表示リストを増やす方法はあります。ありがとうございます。

私は助けてくれてありがとう、フープのために申し訳ありません。私は人々が飛び降りるように頼んでいます。

+0

これは数週間おきに表示されます。 [* Help:私は全回答がほしい*](http://www.swi-prolog.org/FAQ/AllOutput.html)を参照してください。 – lurker

+1

ありがとうございます。私はそれをトレースで動かすことができると思う。 – Shefeto

答えて

0

これらの出力を防ぐには[_|...]以下のコードを追加してください。

:- set_prolog_flag(toplevel_print_options, 
    [quoted(true), portrayed(true), max_depth(0)]). 
関連する問題