bracket RHS when necessary in variable equations
This commit is contained in:
@@ -147,7 +147,7 @@ impl MachineState {
|
|||||||
Addr::Con(Constant::Number(Number::Integer(ref n)))
|
Addr::Con(Constant::Number(Number::Integer(ref n)))
|
||||||
if !n.is_negative() => {
|
if !n.is_negative() => {
|
||||||
let n = offset + n.as_ref();
|
let n = offset + n.as_ref();
|
||||||
|
|
||||||
let i = n.mod_floor(&BigInt::from(26)).to_usize().unwrap();
|
let i = n.mod_floor(&BigInt::from(26)).to_usize().unwrap();
|
||||||
let j = n.div_floor(&BigInt::from(26));
|
let j = n.div_floor(&BigInt::from(26));
|
||||||
|
|
||||||
@@ -168,6 +168,7 @@ pub struct HCPrinter<'a, Outputter> {
|
|||||||
outputter: Outputter,
|
outputter: Outputter,
|
||||||
machine_st: &'a MachineState,
|
machine_st: &'a MachineState,
|
||||||
state_stack: Vec<TokenOrRedirect>,
|
state_stack: Vec<TokenOrRedirect>,
|
||||||
|
toplevel_spec: Option<DirectedOp>,
|
||||||
heap_locs: ReverseHeapVarDict,
|
heap_locs: ReverseHeapVarDict,
|
||||||
printed_vars: HashSet<Addr>,
|
printed_vars: HashSet<Addr>,
|
||||||
last_item_idx: usize,
|
last_item_idx: usize,
|
||||||
@@ -276,6 +277,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
machine_st,
|
machine_st,
|
||||||
state_stack: vec![],
|
state_stack: vec![],
|
||||||
heap_locs: ReverseHeapVarDict::new(),
|
heap_locs: ReverseHeapVarDict::new(),
|
||||||
|
toplevel_spec: None,
|
||||||
printed_vars: HashSet::new(),
|
printed_vars: HashSet::new(),
|
||||||
last_item_idx: 0,
|
last_item_idx: 0,
|
||||||
numbervars: false,
|
numbervars: false,
|
||||||
@@ -290,7 +292,9 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
{
|
{
|
||||||
let mut printer = Self::new(machine_st, output);
|
let mut printer = Self::new(machine_st, output);
|
||||||
|
|
||||||
|
printer.toplevel_spec = Some(DirectedOp::Right(clause_name!("="), (700, XFX)));
|
||||||
printer.heap_locs = reverse_heap_locs(machine_st, heap_locs);
|
printer.heap_locs = reverse_heap_locs(machine_st, heap_locs);
|
||||||
|
|
||||||
printer
|
printer
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,7 +516,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
|
|
||||||
push_space_if_amb!(self, &output_str, {
|
push_space_if_amb!(self, &output_str, {
|
||||||
self.append_str(&output_str.trim());
|
self.append_str(&output_str.trim());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
Constant::Number(n) => {
|
Constant::Number(n) => {
|
||||||
let output_str = format!("{}", n);
|
let output_str = format!("{}", n);
|
||||||
@@ -670,7 +674,8 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter>
|
|||||||
self.append_str(", ")
|
self.append_str(", ")
|
||||||
}
|
}
|
||||||
} else if !iter.stack().is_empty() {
|
} else if !iter.stack().is_empty() {
|
||||||
self.handle_heap_term(&mut iter, None, false);
|
let spec = self.toplevel_spec.take();
|
||||||
|
self.handle_heap_term(&mut iter, spec, false);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,11 +411,11 @@ impl Machine {
|
|||||||
EvalSession::from(SessionError::QueryFailure)
|
EvalSession::from(SessionError::QueryFailure)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toplevel_heap_view<Outputter>(&self, var_dir: &HeapVarDict, mut output: Outputter) -> Outputter
|
pub fn toplevel_heap_view<Outputter>(&self, var_dir: &HeapVarDict, mut output: Outputter) -> Outputter
|
||||||
where Outputter: HCValueOutputter
|
where Outputter: HCValueOutputter
|
||||||
{
|
{
|
||||||
let mut sorted_vars: Vec<(&Rc<Var>, &Addr)> = var_dir.iter().collect();
|
let mut sorted_vars: Vec<_> = var_dir.iter().collect();
|
||||||
sorted_vars.sort_by_key(|ref v| v.0);
|
sorted_vars.sort_by_key(|ref v| v.0);
|
||||||
|
|
||||||
for (var, addr) in sorted_vars {
|
for (var, addr) in sorted_vars {
|
||||||
@@ -424,7 +424,7 @@ impl Machine {
|
|||||||
if addr.is_ref() {
|
if addr.is_ref() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
output = self.machine_st.print_var_eq(var.clone(), addr, var_dir, output);
|
output = self.machine_st.print_var_eq(var.clone(), addr, var_dir, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
10
src/tests.rs
10
src/tests.rs
@@ -1682,7 +1682,7 @@ fn test_queries_on_builtins()
|
|||||||
[["X = '\\b\\r\\f\\t\\n'"]]);
|
[["X = '\\b\\r\\f\\t\\n'"]]);
|
||||||
|
|
||||||
assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
|
assert_prolog_success!(&mut wam, "?- X = ((*)=(*)).",
|
||||||
[["X = (*)=(*)"]]);
|
[["X = ((*)=(*))"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",
|
assert_prolog_success!(&mut wam, "?- X = [.,.(.,.,.)].",
|
||||||
[["X = ['.', '.'('.', '.', '.')]"]]);
|
[["X = ['.', '.'('.', '.', '.')]"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = a+(b*c).",
|
assert_prolog_success!(&mut wam, "?- X = a+(b*c).",
|
||||||
@@ -1696,9 +1696,9 @@ fn test_queries_on_builtins()
|
|||||||
assert_prolog_success!(&mut wam, "?- X = (-)-(-).",
|
assert_prolog_success!(&mut wam, "?- X = (-)-(-).",
|
||||||
[["X = (-)-(-)"]]);
|
[["X = (-)-(-)"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = ((:-):-(:-)).",
|
assert_prolog_success!(&mut wam, "?- X = ((:-):-(:-)).",
|
||||||
[["X = (:-):-(:-)"]]);
|
[["X = ((:-):-(:-))"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = (a:-b,c).",
|
assert_prolog_success!(&mut wam, "?- X = (a:-b,c).",
|
||||||
[["X = a:-b,c"]]);
|
[["X = (a:-b,c)"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = f((f:-a,b,c)).",
|
assert_prolog_success!(&mut wam, "?- X = f((f:-a,b,c)).",
|
||||||
[["X = f((f:-a,b,c))"]]);
|
[["X = f((f:-a,b,c))"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- X = f((f:-a,(b,c))).",
|
assert_prolog_success!(&mut wam, "?- X = f((f:-a,(b,c))).",
|
||||||
@@ -2409,10 +2409,10 @@ fn test_queries_on_attributed_variables()
|
|||||||
Vs = [X,Y],
|
Vs = [X,Y],
|
||||||
variables_set_zdd(Vs, ZDD),
|
variables_set_zdd(Vs, ZDD),
|
||||||
X = 1.",
|
X = 1.",
|
||||||
[["X = 1", "Y = 0", "Vs = [1, 0]", "ZDD = 1->b(true);0->b(true);b(false)"]]);
|
[["X = 1", "Y = 0", "Vs = [1, 0]", "ZDD = (1->b(true);0->b(true);b(false))"]]);
|
||||||
assert_prolog_success!(&mut wam, "?- ZDD = ( X -> b(true) ; ( Y -> b(true) ; b(false) ) ),
|
assert_prolog_success!(&mut wam, "?- ZDD = ( X -> b(true) ; ( Y -> b(true) ; b(false) ) ),
|
||||||
Vs = [X,Y],
|
Vs = [X,Y],
|
||||||
variables_set_zdd(Vs, ZDD),
|
variables_set_zdd(Vs, ZDD),
|
||||||
X = 0.",
|
X = 0.",
|
||||||
[["Vs = [0, _58]", "X = 0", "Y = _58", "ZDD = 0->b(true);_58->b(true);b(false)"]]);
|
[["Vs = [0, _58]", "X = 0", "Y = _58", "ZDD = (0->b(true);_58->b(true);b(false))"]]);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user