2014-10-18 2 views
0

я следующие предикаты в моей базе данных, которую я успешно разобранного от входа:Пролог синтаксического анализа и вывода

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

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

Теперь, учитывая соответствующий запрос, например «Список всех элементов» Как вывести их красиво, как :

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

ответ

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('[email protected] have values [email protected] respectively', 
     [out_comma_sep_list(As), out_comma_sep_list(Bs)]). 
+0

Но, не FindAll дополнительно выход L = [...] на экране? Я хотел бы как-то подавить это. – user3614293

+0

нет, findall не пишет. – CapelliC

+0

findall (элемент A (A, B), L), write (L) возвращает меня: L = ['El1', 'El2', 'El3'] \ n [El1, El2, El2], который беспорядочен с моя программа. Как устранить этот выход L? – user3614293

Смежные вопросы