int main(int argc, char **argv) { FILE *rule_fp; Topform c; Term t; int i; Clause_eval compiled_rule; Plist rules = NULL; init_standard_ladr(); init_weight(NULL, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0); i = register_attribute("label", STRING_ATTRIBUTE); /* ignore these */ i = register_attribute("answer", TERM_ATTRIBUTE); /* ignore these */ rule_fp = fopen(argv[1], "r"); if (rule_fp == NULL) fatal_error("test_clause_eval, rule file cannot be opened for reading"); t = read_term(rule_fp, stderr); /* get first rule */ while (t != NULL) { compiled_rule = compile_clause_eval_rule(t); rules = plist_append(rules, compiled_rule); fwrite_term_nl(stdout, t); zap_term(t); t = read_term(rule_fp, stderr); } fclose(rule_fp); /* Evaluate each clause on stdin. */ c = read_clause(stdin, stderr); while (c != NULL && !end_of_list_clause(c)) { Plist p; c->weight = clause_weight(c->literals); for (p = rules; p; p = p->next) { Clause_eval rule = p->v; BOOL result = eval_clause_in_rule(c, rule); printf("%d (wt=%.3f) : ", result, c->weight); fwrite_clause(stdout, c, CL_FORM_BARE); } printf("\n"); zap_topform(c); c = read_clause(stdin, stderr); } exit(0); } /* main */
/* PUBLIC */ Topform clause_reader(BOOL fast) { if (fast) return fast_read_clause(stdin, stderr); else return read_clause(stdin, stderr); } /* clause_reader */
/* PUBLIC */ Clist read_clause_clist(FILE *fin, FILE *fout, char *name, BOOL assign_id) { Clist lst = clist_init(name); Topform c; c = read_clause(fin, fout); while (c != NULL && !end_of_list_clause(c)) { if (assign_id) assign_clause_id(c); c->justification = input_just(); clist_append(c, lst); c = read_clause(fin, fout); } if (c != NULL) zap_topform(c); /* end_of_list_clause */ return lst; } /* read_clause_clist */
bool parse_dimacs_core(Buffer & in, std::ostream& err, sat::solver & solver) { sat::literal_vector lits; try { while (true) { skip_whitespace(in); if (*in == EOF) { break; } else if (*in == 'c' || *in == 'p') { skip_line(in); } else { read_clause(in, err, solver, lits); solver.mk_clause(lits.size(), lits.c_ptr()); } } } catch (lex_error) { return false; } return true; }
virtual bool code (PrologElement * parameters, PrologResolution * resolution) { if (parameters -> isEarth ()) { delete this; return true; } if (! parameters -> isPair ()) return false; PrologElement * a = parameters -> getLeft (); if (! a -> isAtom ()) return false; parameters = parameters -> getRight (); PrologAtom * control_atom = a -> getAtom (); AREA question; if (control_atom == sql_atom) { if (! parameters -> isPair ()) return false; PrologElement * q = parameters -> getLeft (); if (! q -> isText ()) return false; parameters = parameters -> getRight (); if (mysql_query (connection, q -> getText ()) != 0) return false; MYSQL_RES * result = mysql_use_result (connection); if (result == NULL) return true; MYSQL_ROW row; int num_fields = mysql_num_fields (result); parameters -> setEarth (); while ((row = mysql_fetch_row (result)) != 0) { parameters -> setPair (); PrologElement * head = parameters -> getLeft (); for (int ind = 0; ind < num_fields; ind++) { head -> setPair (); if (row [ind] != NULL) { head -> getLeft () -> setText (row [ind]); } head = head -> getRight (); } parameters = parameters -> getRight (); } mysql_free_result (result); return true; } if (control_atom == dbcl_atom) { if (! parameters -> isPair ()) return false; PrologElement * e = parameters -> getLeft (); parameters = parameters -> getRight (); if (e -> isText ()) { if (! parameters -> isPair ()) return false; PrologElement * atom = parameters -> getLeft (); if (! atom -> isText ()) return false; parameters = parameters -> getRight (); if (parameters -> isVar ()) return read_number_of_clauses (parameters, e -> getText (), atom -> getText ()); if (! parameters -> isPair ()) return false; PrologElement * ordering = parameters -> getLeft (); if (ordering -> isVar ()) return read_number_of_clauses (ordering, e -> getText (), atom -> getText ()); if (! ordering -> isInteger ()) return false; parameters = parameters -> getRight (); if (parameters -> isEarth ()) return read_number_of_clauses (ordering, e -> getText (), atom -> getText ()); return read_clause (parameters, e -> getText (), atom -> getText (), ordering -> getInteger ()); } if (e -> isAtom ()) { PrologDirectory * dir = find_atoms_module (e -> getAtom ()); if (dir == NULL) return false; if (parameters -> isVar ()) return read_number_of_clauses (parameters, dir -> name (), e -> getAtom () -> name ()); if (! parameters -> isPair ()) return false; PrologElement * ordering = parameters -> getLeft (); if (ordering -> isVar ()) return read_number_of_clauses (ordering, dir -> name (), e -> getAtom () -> name ()); if (! ordering -> isInteger ()) return false; parameters = parameters -> getRight (); if (parameters -> isEarth ()) return read_number_of_clauses (ordering, dir -> name (), e -> getAtom () -> name ()); return read_clause (parameters, dir -> name (), e -> getAtom () -> name (), ordering -> getInteger ()); } return false; } if (control_atom == adbcl_atom || control_atom == adbcl0_atom) { if (! parameters -> isPair ()) return false; parameters = parameters -> getLeft (); AREA drop; if (fast) root -> getValue (parameters, drop, 0); if (! parameters -> isPair ()) return false; PrologElement * head = parameters -> getLeft (); if (! head -> isPair ()) return false; PrologElement * atom = head -> getLeft (); if (! atom -> isAtom ()) return false; MYSQL_RES * result; MYSQL_ROW row; PrologDirectory * dir = find_atoms_module (atom -> getAtom ()); // get the module_id and atom_id int module_id = find_or_create_module (question, dir -> name ()); int atom_id = find_or_create_atom (question, atom -> getAtom ()); // now get the clause ordering int ordering = 0; if (control_atom == adbcl_atom) { if (fast) sprintf (question, "select max(ordering) + 1 from text_clauses where module_id = %i and atom_id = %i", module_id, atom_id); else sprintf (question, "select max(ordering) + 1 from clauses where module_id = %i and atom_id = %i", module_id, atom_id); if (mysql_query (connection, question) != 0) return false; result = mysql_use_result (connection); if (result == NULL) return false; if (mysql_num_fields (result) < 1) FAIL if ((row = mysql_fetch_row (result)) == 0) FAIL if (row [0] != NULL) ordering = atoi (row [0]); mysql_free_result (result); } else { if (fast) sprintf (question, "update text_clauses set ordering = ordering + 1 where atom_id = %i", atom_id); else sprintf (question, "update clauses set ordering = ordering + 1 where atom_id = %i", atom_id); if (mysql_query (connection, question) != 0) return false; } // insert clause and get clause id if (fast) { sprintf (question, "insert into text_clauses (module_id, atom_id, ordering, text) values (%i, %i, %i, '%s')", module_id, atom_id, ordering, drop); if (mysql_query (connection, question) != 0) {printf ("failed at text clause\n");} return true; } sprintf (question, "insert into clauses (module_id, atom_id, ordering, parameters_id, body_id) values (%i, %i, %i, 0, 0)", module_id, atom_id, ordering); if (mysql_query (connection, question) != 0) return false; int clause_id = last_insert_id(); // now insert elements int head_id = store_element (question, module_id, atom_id, clause_id, head -> getRight ()); int body_id = store_element (question, module_id, atom_id, clause_id, parameters -> getRight ()); sprintf (question, "update clauses set parameters_id = %i, body_id = %i where id = %i", head_id, body_id, clause_id); if (mysql_query (connection, question) != 0) return false; return true; }