Prolog 序言-如何打印列表

Prolog 序言-如何打印列表,prolog,Prolog,我需要打印列表元素,但我有问题。。。 我有这样的事实: processor('Intel Core i3 8100', 104, 'low_range') . processor('Ryzen 5 2400g', 135, 'middle_range'). motherboard('Gigabyte Z370P D3', 98, 'low_range') . motherboard('Gigabyte GBT AX370M-DS3H', 70, 'middle_range').

我需要打印列表元素,但我有问题。。。 我有这样的事实:

processor('Intel Core i3 8100', 104, 'low_range')   .
processor('Ryzen 5 2400g', 135, 'middle_range').    
motherboard('Gigabyte Z370P D3', 98, 'low_range')   .
motherboard('Gigabyte GBT AX370M-DS3H', 70, 'middle_range').
.....
configuration(P, M, R, C, A, V, S, D, H, Price_range) :-
    processor(P, _Proc_price, Price_range),
    motherboard(M, _Motherboard_price, Price_range),
    ram(R, _Ram_price, Price_range),
    case(C, _Case_price, Price_range),
    ali(A, _Ali_price, Price_range),
    video_card(V, _Vga_price, Price_range),
    ssd(S, _Ssd_price, Price_range),
    monitor(D, _Monitor_price, Price_range),
    hdd(H, _Hdd_price, Price_range).
我通过findall函数过滤这些配置:

findall(P-M-R-C-A-V-S-D-H, configuration(P, M, R, C, A, V, S, D, H, T), Res),
我需要以这种方式打印Res元素:

configuration number 1
processor
motherboard
ram
case
ali
video card
ssd
monitor
hdd

configuration number 2
processor
motherboard
ram
case
ali
video card
ssd
monitor
hdd

....

configuration number N
processor
motherboard
ram
case
ali
video card
ssd
monitor
hdd

你能帮我吗?我不明白如何做

您可能想使用
而不是
findall/3

forall(:Cond,:Action)
对于Cond的所有可选绑定,都可以证明操作

e、 g:

编辑:您可以通过以下方式创建计数器:

:- dynamic(mycounter/1).
:- assertz(mycounter(0)).

incr_mycounter(X):-
    mycounter(X),
    retractall(mycounter(_)),
    succ(X,Y),
    assertz(mycounter(Y)).
然后像这样使用它:

forall(configuration(P, M, R, C, A, V, S, D, H, T),
    (incr_mycounter(N), writeln(configuration-N), writeln(P), writeln(M), ...)).

您可能希望对all/2使用
而不是
findall/3

forall(:Cond,:Action)
对于Cond的所有可选绑定,都可以证明操作

e、 g:

编辑:您可以通过以下方式创建计数器:

:- dynamic(mycounter/1).
:- assertz(mycounter(0)).

incr_mycounter(X):-
    mycounter(X),
    retractall(mycounter(_)),
    succ(X,Y),
    assertz(mycounter(Y)).
然后像这样使用它:

forall(configuration(P, M, R, C, A, V, S, D, H, T),
    (incr_mycounter(N), writeln(configuration-N), writeln(P), writeln(M), ...)).

你是我的英雄!!!我只有一个问题,我试图在每个配置之前打印一条消息,比如“configurationnumern”,我把它放在forall之前:I=1,Q='configurationnumber',我把它放在forall开头:string_concat(Q,I,n_conf),它可以工作,但如果我把I=I+1放在forall结尾,我在打印第二个配置之前会出错!为什么?你是我的英雄!!!我只有一个问题,我试图在每个配置之前打印一条消息,比如“configurationnumern”,我把它放在forall之前:I=1,Q='configurationnumber',我把它放在forall开头:string_concat(Q,I,n_conf),它可以工作,但如果我把I=I+1放在forall结尾,我在打印第二个配置之前会出错!为什么?