29
30:- module(swish_render_pic,
31 [ term_rendering//3 32 ,clauses//1
33 ]). 34:- use_module(library(apply)). 35:- use_module(library(lists)). 36:- use_module(library(option)). 37:- use_module(library(http/html_write)). 38:- use_module(library(http/term_html)). 39:- use_module(library(pascal)). 40:- use_module('../render'). 41
42:- register_renderer(pic, "Render a probabilistic constraint logic theory").
59term_rendering(Term, _Vars, _Options) -->
60 {is_list_of_clauses(Term)
61 }, !,
62 html(pre(\clauses(Term))).
63
64clauses([]) --> [].
65clauses([HC|T]) -->
66 {
67 numbervars(HC,0,_),
68 HC=rule((H:-B),P),!
69 },
70 pic(H,B,P),
71 clauses(T).
72
73pic(H,B,P)-->
74 {
75 format(atom(Prob),'~f ::~n',[P]),
76 format(atom(I),'--->~n',[])},
77 [Prob],
78 conj(B),
79 [I],
80 head(H).
81
82head([])-->!,
83 {format(atom(A),"false.~n~n",[])},
84 [A].
85
86head([((+),Conj)])-->!,
87 {format(atom(A),"",[])},
88 [A],
89 conj(Conj),
90 {format(atom(B),".~n~n",[])},
91 [B].
92
93head([((-),Conj)])-->!,
94 {format(atom(A),"not(",[])},
95 [A],
96 conj(Conj),
97 {format(atom(B),").~n~n",[])},
98 [B].
99
100head([((+),Conj)|Rest])-->
101 {format(atom(A),"",[])},
102 [A],
103 conj(Conj),
104 {format(atom(B),"~n\\/~n",[])},
105 [B],
106 head(Rest).
107
108head([((-),Conj)|Rest])-->
109 {format(atom(A),"not(",[])},
110 [A],
111 conj(Conj),
112 {format(atom(B),")\\/",[])},
113 [B],
114 head(Rest).
115
116conj([])-->
117 {format(atom(A),"true",[])},
118 [A].
119
120conj([H])-->
121 {format(atom(A),"~q",[H])},!,
122 [A].
123
124conj([H|T])-->
125 {format(atom(A),"~q/\\",[H])},
126 [A],
127 conj(T).
139is_list_of_clauses(Term) :-
140 is_list(Term), Term \== [],
141 maplist(is_clause, Term).
142
143is_clause(rule((_H :- _B),_)).
149is_list_of_lists(Term, Rows, Cols) :-
150 is_list(Term), Term \== [],
151 length(Term, Rows),
152 maplist(is_list_row(Cols), Term),
153 Cols > 0.
154
155is_list_row(Length, Term) :-
156 is_list(Term),
157 length(Term, Length)
SWISH table renderer
Render table-like data. */