Prolog解析和输出

时间:2014-10-18 05:34:33

标签: prolog

我的数据库中有以下谓词,我从输入中成功解析了

19 ?- listing(element1).
:- dynamic element1/2.

element1('El1', [20]).
element1('El2', [25]).
element1('El3', [30]).

现在,给出一个适当的查询,例如'列出所有元素'我如何很好地输出它们,如:

'El1, El2, El3 have values 20, 25, 30 respectively'  ?

1 个答案:

答案 0 :(得分:3)

SWI-Prolog支持通过〜@ format specifier调用用户指定的谓词。所以,如果你写一个像

这样的谓词
out_comma_sep_list(L) :- atomic_list_concat(L, ' ,', T), write(T).

你可以做到

report :-
  findall(A-B, element1(A, B), L), pairs_keys_values(L, As, Bs),
  format('~@ have values ~@ respectively', 
      [out_comma_sep_list(As), out_comma_sep_list(Bs)]).