質問
私は述語を持っています 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)]).
また、使用できる他のオプションもあります プリネイトライゼーション すでにコメントされているファイル。