From f74005a166f18737bbdc5654b8d76af5023a1bf8 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 23 May 2020 12:12:34 -0600 Subject: [PATCH] update (^)/2 in light of Draft Technical Corrigendum 3 (#559) --- src/prolog/machine/arithmetic_ops.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/prolog/machine/arithmetic_ops.rs b/src/prolog/machine/arithmetic_ops.rs index ae3e3c62..5f14aadc 100644 --- a/src/prolog/machine/arithmetic_ops.rs +++ b/src/prolog/machine/arithmetic_ops.rs @@ -398,7 +398,7 @@ impl MachineState { match (n1, n2) { (Number::Fixnum(n1), Number::Fixnum(n2)) => { - if n1 != 1 && n2 < -1 { + if !(n1 == 1 || n1 == 0 || n1 == -1) && n2 < 0 { let n = Number::from(n1); let stub = MachineError::functor_stub(clause_name!("^"), 2); @@ -424,7 +424,7 @@ impl MachineState { } } (Number::Fixnum(n1), Number::Integer(n2)) => { - if n1 != 1 && &*n2 < &-1 { + if (n1 == 1 || n1 == 0 || n1 == -1) && &*n2 < &0 { let n = Number::from(n1); let stub = MachineError::functor_stub(clause_name!("^"), 2); @@ -442,7 +442,7 @@ impl MachineState { } } (Number::Integer(n1), Number::Fixnum(n2)) => { - if &*n1 != &1 && n2 < -1 { + if !(&*n1 == &1 || &*n1 == &0 || &*n1 == &-1) && n2 < 0 { let n = Number::Integer(n1); let stub = MachineError::functor_stub(clause_name!("^"), 2); @@ -460,7 +460,7 @@ impl MachineState { } } (Number::Integer(n1), Number::Integer(n2)) => { - if &*n1 != &1 && &*n2 < &-1 { + if !(&*n1 == &1 || &*n1 == &0 || &*n1 == &-1) && &*n2 < &0 { let n = Number::Integer(n1); let stub = MachineError::functor_stub(clause_name!("^"), 2); -- 2.54.0