質問

私は述語を持っています m(L,L) そして、私はそれが必要なリストを返してほしい。コードはこれです:

m([],[]).
m([H|T],[H|L]) :- m(T,L).

この例で使用しようとするとき:

m([1,2,3,4,5,6,7,8,9,10],L)

私はこれを答えとして得ます:

L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].

(より少ない要素でそれを試してみると大丈夫だと思いました。)なぜこれが起こっているのか、リストが未完成なのですか?

どうすればこれを避けることができますか?

申し訳ありませんが、それが本当に愚かな質問ですが、私はWebを検索しましたが、理解するのに役立つドキュメントが見つかりませんでした...ありがとう!

役に立ちましたか?

解決

リストは終了しました - 出力は視覚化のために切り捨てられています。リストを印刷する述語を書くと、それが完全であることがわかります。 SWI Prologを使用していると思います。つまり、チェックアウトできることを意味します このリンク 表示設定を変更する方法については。

他のヒント

デバッガーとしてのトップレベルクエリ/回答ループの両方が、長い複雑な用語を略します。彼らはこれを行い、出力の無限のページを避けます。実際、彼らは使用して書いています write_term/3 これは、引数としてオプションリストを取得します。 Prolog Toplevelによって印刷された回答のオプションリストは、Prolog-Flag Toplevel_print_optionsにあり、デバッガーのものはdebugger_print_optionsにあります。最初は両方とも以下に示されている値を持っています。

?- current_prolog_flag(toplevel_print_options, X).

X = [quoted(true), portray(true), max_depth(10), spacing(next_argument)].

デフォルト設定を変更するには:Prolog Personal Intiibleisationファイルにset_prolog_flag/2ディレクティブを追加します(参照 プリネイトライゼーション)上記のPrologフラグをデフォルトを変更する。

に行くだけです settings -> user init file ... ->

そして、このようにmax_depth(10)を変更します:

 :- set_prolog_flag(toplevel_print_options,
             [quoted(true), portray(true), max_depth(100)]).

また、使用できる他のオプションもあります プリネイトライゼーション すでにコメントされているファイル。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top