pub fn query(
egraph: &mut EGraph,
vars: &[(&str, ArcSort)],
facts: Facts<String, String>,
) -> Result<QueryResult, Error>Expand description
Run a query over the database.
use egglog::prelude::*;
let mut egraph = EGraph::default();
egraph.parse_and_run_program(
None,
"
(function fib (i64) i64 :no-merge)
(set (fib 0) 0)
(set (fib 1) 1)
(rule (
(= f0 (fib x))
(= f1 (fib (+ x 1)))
) (
(set (fib (+ x 2)) (+ f0 f1))
))
(run 10)
",
)?;
let results = query(
&mut egraph,
vars![x: i64, y: i64],
facts![
(= (fib x) y)
(= y 13)
],
)?;
let x = egraph.base_to_value::<i64>(7);
let y = egraph.base_to_value::<i64>(13);
let results: Vec<_> = results.iter().collect();
assert_eq!(results, [[x, y]]);