3

私は述語を持っていて、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|...].

(少ない要素で試してみれば問題ないことに気付きました。)なぜこれが起こっていて、リストが完成していないのですか?

どうすればこれを回避できますか?

本当にばかげた質問で申し訳ありませんが、ウェブを検索しましたが、理解に役立つドキュメントが見つかりませんでした...ありがとう!

4

2 に答える 2

4

リストが完成しました - 出力は視覚化のために切り詰められています。リストを出力する述語を作成すると、それが完成したことがわかります。SWI プロローグを使用していると思います。つまり、表示設定を変更する方法については、このリンクを参照してください。

于 2012-01-12T23:36:50.637 に答える
0

デバッガーとしてのトップレベルのクエリ/応答ループは両方とも、長く複雑な用語を省略します。これは、エンドレスな出力ページを避けるために行われます。実際、彼らは引数としてオプションリストを取るwrite_term/3を使って書いています。Prolog トップレベルによって出力される回答のオプション リストは、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)].

デフォルト設定を変更するには:上記のプロローグ フラグのデフォルトを変更するには、プロローグ個人初期化ファイル ( PlInitialisationを参照) に set_prolog_flag/2 ディレクティブを追加します。

ただ行くsettings -> user init file ... ->

max_depth(10) を次のように変更します。

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

すでにコメントされているPlInitialisationファイルで使用できる他のオプションもあります。

于 2014-12-28T08:32:14.570 に答える