diff --git a/src/prolog/machine/machine_errors.rs b/src/prolog/machine/machine_errors.rs index 01a699fd..d2aa8702 100644 --- a/src/prolog/machine/machine_errors.rs +++ b/src/prolog/machine/machine_errors.rs @@ -32,7 +32,7 @@ impl MachineState { match self.detect_cycles(usize::max_value(), sorted.clone()) { CycleSearchResult::NotList if !sorted.is_ref() => - Err(self.error_form(self.type_error(ValidType::List, sorted))), + Err(self.error_form(self.type_error(ValidType::List, sorted))), _ => Ok(()) } } diff --git a/src/prolog/machine/machine_state_impl.rs b/src/prolog/machine/machine_state_impl.rs index b6f0d1d3..e6ee1a28 100644 --- a/src/prolog/machine/machine_state_impl.rs +++ b/src/prolog/machine/machine_state_impl.rs @@ -1724,8 +1724,10 @@ impl MachineState { }, Addr::HeapCell(_) | Addr::StackCell(..) => Err(self.error_form(self.instantiation_error())), - addr => - Err(self.error_form(self.type_error(ValidType::List, addr))) + Addr::Con(Constant::EmptyList) => + Ok(vec![]), + _ => + Err(self.error_form(self.type_error(ValidType::List, a1))) } } @@ -1781,7 +1783,10 @@ impl MachineState { }, HeapCellValue::Addr(Addr::Con(Constant::EmptyList)) => return CycleSearchResult::ProperList(steps), - _ => return CycleSearchResult::PartialList(steps, hare) + HeapCellValue::Addr(Addr::HeapCell(_)) | HeapCellValue::Addr(Addr::StackCell(..)) => + return CycleSearchResult::PartialList(steps, hare), + _ => + return CycleSearchResult::NotList } } }