2

SWI-PROLOG バージョン 6.6.6 を使用しています

特定の述語タイプのすべての属性を出力したいと考えています。

私はアリティ2の法と呼ばれる述語を持っています。

いくつかの事実は

law(borrow,'To borrow Money on the credit of the United States').
law(commerce,'To regulate Commerce with foreign Nations, and among the several States, and with the Indian Tribes').
law(unifomity,'To establish an uniform Rule of Naturalization, and uniform Laws on the subject of Bankruptcies throughout the United States').
law(money,'To coin Money, regulate the Value thereof, and of foreign Coin, and fix the Standard of Weights and Measures').
law(punishment,'To provide for the Punishment of counterfeiting the Securities and current Coin of the United States').
law(establishment,'To establish Post Offices and post Roads').
law(exclusiverights,'To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries').
law(court,'To constitute Tribunals inferior to the supreme Court').

ここで、タイプを入力して法にアクセスしたいと思います。そのような、

power(X) :- law(X,Y), display('\nCongress has the power : '),display(Y).
powers(ALL) :- display('\nCongress has the powers : '), law(_,Y), display('\n'), display(Y).

これは完全に機能します。ここで、ユーザーがすべての種類の法律が存在することを知りたいので、ユーザーはそれをクエリとして入力して、対応する法律を取得できます。元power(money).

このために、これらすべてのキーワードを取得してリストに追加し、リストを表示するクエリを作成しました。しかし、最終的に印刷されるリストは完全ではありません。

powerList(L) :- findall(X,law(X,_), L).

このコードを使用してリストを取得します。しかし、コンソールの出力は

L = [borrow, commerce, unifomity, money, punishment, establishment, exclusiverights, court, piracyfelony|...].

しかし、著作権侵害の後でさえ、より多くの種類の法律があり、それらはコンソールに出力されません。どうすれば印刷できますか?

4

1 に答える 1

2

これは、出力を短く保とうとする Prolog のトップレベル ループの機能です。

どのように変更するかを調べるには、少なくとも 2 つの要素のリストである値を持つ Prolog がサポートしている Prolog フラグを確認してください。

?- current_prolog_flag(F,Options), Options = [_,_|_].
F = debugger_print_options,
Options = [quoted(true), portray(true), max_depth(10), attributes(portray), spacing(next_argument)] ;
F = toplevel_print_options,
Options = [quoted(true), portray(true), max_depth(10), spacing(next_argument)] ;
F = argv,
Options = [swipl, '-f', none] ;
false.

それに応じて変更します。

?- length(L,10).
L = [_G303, _G306, _G309, _G312, _G315, _G318, _G321, _G324, _G327|...].

?- set_prolog_flag(toplevel_print_options,[quoted(true), portray(true), max_depth(0), spacing(next_argument)]).
true.

?- length(L,10).
L = [_G303, _G306, _G309, _G312, _G315, _G318, _G321, _G324, _G327, _G330].

(SWI 7 以降の新しいバージョンでは、別のフラグ値 がありanswer_write_optionsます。)

于 2014-11-27T19:20:41.837 に答える