]> Repositorios git - scryer-prolog.git/commitdiff
set compound to succeed on non-empty lists.
authorMark Thom <[email protected]>
Sat, 17 Feb 2018 05:34:27 +0000 (22:34 -0700)
committerMark Thom <[email protected]>
Sat, 17 Feb 2018 05:34:27 +0000 (22:34 -0700)
src/prolog/codegen.rs
src/prolog/machine/machine_state_impl.rs
src/tests.rs

index 3e365d868441d8038d89f5d635513d792f57654f..26a354583955b65fdd90238dc56d8af716246887 100644 (file)
@@ -368,7 +368,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                 },
             &InlinedQueryTerm::IsCompound(ref inner_term) =>
                 match inner_term[0].as_ref() {
-                    &Term::Clause(..) => {
+                    &Term::Clause(..) | &Term::Cons(..) => {
                         code.push(succeed!());
                     },
                     &Term::Var(ref vr, ref name) => {
@@ -504,7 +504,7 @@ impl<'a, TermMarker: Allocator<'a>> CodeGenerator<'a, TermMarker>
                                 if !target.is_empty() {
                                     code.push(Line::Query(target));
                                 }
-
+                                
                                 code.push(is_call!(temp_v!(1), at.unwrap_or(interm!(1))));
                             },
                             &Term::Constant(_, ref c @ Constant::Number(_)) => {
index d1985494f58378d55d13a1604f831d816aba17da..1e601f43502cfb0db4721d52d454ec1f1ce5c0d2 100644 (file)
@@ -1371,7 +1371,7 @@ SetupCallCleanupCutPolicy.")
                 let d = self.store(self.deref(self[r].clone()));
 
                 match d {
-                    Addr::Str(_) => self.p += 1,
+                    Addr::Str(_) | Addr::Lis(_) => self.p += 1,
                     _ => self.fail = true
                 };
             },
@@ -1777,7 +1777,7 @@ SetupCallCleanupCutPolicy.")
                         self.fail = !self.structural_eq_test(),
                     _ => self.compare_term(qt)
                 };
-                
+
                 self.p = self.cp;
             },
             &ControlInstruction::Deallocate => {
@@ -1813,7 +1813,7 @@ SetupCallCleanupCutPolicy.")
             &ControlInstruction::DuplicateTermExecute => {
                 self.duplicate_term();
                 self.p = self.cp;
-            },            
+            },
             &ControlInstruction::DynamicIs => {
                 let a = self[temp_v!(1)].clone();
                 let result = try_or_fail!(self, self.arith_eval_by_metacall(temp_v!(2)));
index 76a90ddd649b49d62f5e9a39d6967f8619e9ae12..d80e7f4f9b8a9663e318cc6bb17dfef10ec79779 100644 (file)
@@ -1311,12 +1311,12 @@ fn test_queries_on_builtins()
 
     assert_prolog_success!(&mut wam, "?- compound(functor(compound)).");
     assert_prolog_success!(&mut wam, "?- compound(f(X)).");
+    assert_prolog_success!(&mut wam, "?- compound([1,2,3]).");
+    assert_prolog_failure!(&mut wam, "?- compound([]).");
     assert_prolog_failure!(&mut wam, "?- compound(3.14159269).");
     assert_prolog_failure!(&mut wam, "?- compound(3).");
     assert_prolog_failure!(&mut wam, "?- compound(\"sdfsa\").");
     assert_prolog_failure!(&mut wam, "?- compound(atom).");
-    assert_prolog_failure!(&mut wam, "?- compound([1,2,3]).");
-    assert_prolog_failure!(&mut wam, "?- compound([1,2,X]).");
 
     assert_prolog_failure!(&mut wam, "?- string(functor(string)).");
     assert_prolog_failure!(&mut wam, "?- string(3.14159269).");