% generuje plik .cpp generujący plik .tex z macierzą incydencji :- [przyklad_hg]. cGen(FileName, Conn, OutFileName) :- cGenHead(FileName), cGenLists(Conn), cGenBody, cFillTable(Conn), cGenOutFile(OutFileName), cGenFoot. cGenHead(FileName) :- tell(FileName), write('#include'),nl, write('#include'),nl, write('#include'),nl, write('#include'),nl,nl, write('using namespace std;'),nl,nl, write('int main()'),nl, write('{'),nl, write(' list Nodes;'),nl, write(' list Edges;'),nl,nl. cGenBody:- nl, write(' Edges.remove("[]");'),nl, write(' Nodes.sort();'),nl, write(' Edges.sort();'),nl, write(' Nodes.unique();'),nl, write(' Edges.unique();'),nl, write(' int size_n = Nodes.size();'),nl, write(' int size_e = Edges.size();'),nl, write(' string Tab[size_n + 1][size_e + 1];'),nl,nl, write(' for (int i = 0; i < size_n + 1; i++)'),nl, write(' {'),nl, write(' for (int j = 0; j < size_e + 1; j++)'),nl, write(' {'),nl, write(' Tab[i][j] = "0";'),nl, write(' }'),nl, write(' }'),nl, write(' Tab[0][0] = " ";'),nl, write(' for (int i = 1; i < size_n + 1; i++)'),nl, write(' {'),nl, write(' Tab[i][0] = Nodes.front();'),nl, write(' Nodes.pop_front();'),nl, write(' }'),nl, write(' for (int i = 1; i < size_e + 1; i++)'),nl, write(' {'),nl, write(' Tab[0][i] = Edges.front();'),nl, write(' Edges.pop_front();'),nl, write(' }'),nl, write(' for (int i = 0; i < size_n + 1; i++)'),nl, write(' {'),nl, write(' for (int j = 0; j < size_e + 1; j++)'),nl, write(' {'),nl. cFillTable(Conn):- Conn = ConnPredicateName / ConnNumberOfArgs, functor(ConnPredicate,ConnPredicateName,ConnNumberOfArgs), ConnPredicate, ConnPredicate =.. [_,FromNode, ToEdge|_], write(' if((Tab[0][j] == "'),write(ToEdge),write('") && (Tab[i][0] == "'),write(FromNode),write('"))'),nl, write(' Tab[i][j] = "1";'),nl, fail. cFillTable(_). cGenLists(Conn):- Conn = ConnPredicateName / ConnNumberOfArgs, functor(ConnPredicate,ConnPredicateName,ConnNumberOfArgs), ConnPredicate, ConnPredicate =.. [_,FromNode, ToEdge|_], write(' Nodes.push_back(\"'),write(FromNode),write('\");'),nl, write(' Edges.push_back(\"'),write(ToEdge),write('\");'),nl, fail. cGenLists(_). cGenOutFile(OutFileName):- write(' }'),nl, write(' }'),nl,nl, write(' ofstream myfile;'),nl, write(' myfile.open("'),write(OutFileName),write('");'),nl, write(' myfile << "\\\\documentclass[a4paper,11pt]{article}" << endl;'),nl, write(' myfile << "\\\\usepackage{multirow}" << endl;'),nl, write(' myfile << "\\\\begin{document}" << endl;'),nl, write(' myfile << "\\\\begin{tabular}{";'),nl, write(' for (int i = 0; i < size_e + 1; i++)'),nl, write(' myfile << "c|";'),nl, write(' myfile << "}" << endl;'),nl, write(' myfile << "\\\\cline{2-" << size_e + 1 << "}" << endl;'),nl, write(' for (int i = 1; i < size_e + 1; i++)'),nl, write(' myfile << "& " << Tab[0][i] << " ";'),nl, write(' myfile << "\\\\\\\\ \\\\cline{1-" << size_e + 1 << "}" << endl;'),nl, write(' for (int i = 1; i < size_n + 1; i++)'),nl, write(' {'),nl, write(' myfile << "\\\\multicolumn{1}{|c|}{" << Tab[i][0] << "}";'),nl, write(' for (int j = 1; j < size_e + 1; j++)'),nl, write(' myfile << " &" << Tab[i][j] + " ";'),nl, write(' myfile << "\\\\\\\\ \\\\cline{1-" << size_e + 1 << "}" << endl;'),nl, write(' }'),nl, write(' myfile << "\\\\end{tabular}" << endl;'),nl, write(' myfile << "\\\\end{document}" << endl;'),nl, write(' myfile.close();'),nl. cGenFoot:- write(' return 0;'),nl, write('}'),nl, told.