問題のすべての解決策を含むリストを印刷しようとしていますが、Prolog は解決策の一部しか提供しておらず、次のように途中で途切れています。
[[something-something], [something-something], [something-something], [...-...], [...][...].
Prolog にすべてのソリューションを出力させるにはどうすればよいですか?
問題のすべての解決策を含むリストを印刷しようとしていますが、Prolog は解決策の一部しか提供しておらず、次のように途中で途切れています。
[[something-something], [something-something], [something-something], [...-...], [...][...].
Prolog にすべてのソリューションを出力させるにはどうすればよいですか?
私は maplist/2 を使っています
?- numlist(1,10,L),maplist(writeln,L).
1
2
3
4
5
6
7
8
9
10
L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].
SWI-Prolog を実行している場合は、省略記号を避けるように指示できます。
?- [user].
|: no_ellipsis :-
|: current_prolog_flag(toplevel_print_options, V),
|: select(max_depth(_), V, U),
|: set_prolog_flag(toplevel_print_options, U).
|: end_of_file.
|: % user://3 compiled 0,05 sec, 1 clauses
true.
?- no_ellipsis.
true .
?- numlist(1,20,L).
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20].
このようなルールは、起動ファイル (Unix では ~/.plrc ) に配置できます。
または、書き込み述語を使用できます
?- numlist(1,20,L),format('~w',[L]).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...].
あなたはただそれを書き出す必要があります。SWI-Prolog のデフォルトのインタラクティブなプリティ プリンターは、出力で圧倒されるのを避けるためにこれを行います。だから、もし今あなたがやっているなら:
?- foo(X).
X = [[something-something], [something-something], [something-something], [...-...], [...][...].
代わりにこれを行います:
?- foo(X), write(X), nl.
... the complete output ...
X = [[something-something], [something-something], [something-something], [...-...], [...][...].
例えば:
?- length(X, 10), write(X), nl.
[_G1607,_G1610,_G1613,_G1616,_G1619,_G1622,_G1625,_G1628,_G1631,_G1634]
X = [_G1607, _G1610, _G1613, _G1616, _G1619, _G1622, _G1625, _G1628, _G1631|...].