use clingo::*;
use std::env;
fn print_model(model: &Model) {
let atoms = model
.symbols(ShowType::SHOWN)
.expect("Failed to retrieve symbols in the model.");
print!("Model:");
for symbol in atoms {
print!(" {}", symbol);
}
println!();
}
fn solve(ctl: Control) {
let mut handle = ctl
.solve(SolveMode::YIELD, &[])
.expect("Failed retrieving solve handle.");
loop {
handle.resume().expect("Failed resume on solve handle.");
match handle.model() {
Ok(Some(model)) => print_model(model),
Ok(None) => break,
Err(e) => panic!("Error: {}", e),
}
}
handle
.get()
.expect("Failed to get result from solve handle.");
handle.close().expect("Failed to close solve handle.");
}
fn main() {
let options = env::args().skip(1).collect();
let mut ctl = control(options).expect("Failed creating Control.");
ctl.add("base", &[], "a :- not b. b :- not a.")
.expect("Failed to add a logic program.");
let part = Part::new("base", vec![]).unwrap();
let parts = vec![part];
ctl.ground(&parts)
.expect("Failed to ground a logic program.");
solve(ctl);
}