ignore single line comments after end token read
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "scryer-prolog"
|
name = "scryer-prolog"
|
||||||
version = "0.8.92"
|
version = "0.8.93"
|
||||||
authors = ["Mark Thom <markjordanthom@gmail.com>"]
|
authors = ["Mark Thom <markjordanthom@gmail.com>"]
|
||||||
repository = "https://github.com/mthom/scryer-prolog"
|
repository = "https://github.com/mthom/scryer-prolog"
|
||||||
description = "A modern Prolog implementation written mostly in Rust."
|
description = "A modern Prolog implementation written mostly in Rust."
|
||||||
@@ -15,7 +15,7 @@ dirs = "2.0.2"
|
|||||||
downcast = "0.10.0"
|
downcast = "0.10.0"
|
||||||
indexmap = "1.0.2"
|
indexmap = "1.0.2"
|
||||||
ordered-float = "0.5.0"
|
ordered-float = "0.5.0"
|
||||||
prolog_parser = "0.8.28"
|
prolog_parser = "0.8.29"
|
||||||
readline_rs_compat = { version = "0.1.9", optional = true }
|
readline_rs_compat = { version = "0.1.9", optional = true }
|
||||||
ref_thread_local = "0.0.0"
|
ref_thread_local = "0.0.0"
|
||||||
rug = "1.4.0"
|
rug = "1.4.0"
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ https://sicstus.sics.se/sicstus/docs/3.7.1/html/sicstus_17.html
|
|||||||
|
|
||||||
:- module(domain, [domain/2]).
|
:- module(domain, [domain/2]).
|
||||||
|
|
||||||
:- use_module(library(atts)).
|
:- use_module('src/prolog/lib/atts').
|
||||||
:- use_module(library(ordsets), [
|
:- use_module('src/prolog/lib/ordsets', [
|
||||||
ord_intersection/3,
|
ord_intersection/3,
|
||||||
ord_intersect/2,
|
ord_intersect/2,
|
||||||
list_to_ord_set/2
|
list_to_ord_set/2
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
:- use_module(library(dcgs)).
|
:- use_module('src/prolog/lib/dcgs').
|
||||||
:- use_module(library(reif)).
|
:- use_module('src/prolog/lib/reif').
|
||||||
|
|
||||||
animals([animal(dog, [is_true('has fur'), is_true('says woof')]),
|
animals([animal(dog, [is_true('has fur'), is_true('says woof')]),
|
||||||
animal(cat, [is_true('has fur'), is_true('says meow')]),
|
animal(cat, [is_true('has fur'), is_true('says meow')]),
|
||||||
|
|||||||
@@ -60,9 +60,9 @@
|
|||||||
|
|
||||||
:- module(zdd, [variables_set_zdd/2]).
|
:- module(zdd, [variables_set_zdd/2]).
|
||||||
|
|
||||||
:- use_module(library(atts)).
|
:- use_module('src/prolog/lib/atts').
|
||||||
:- use_module(library(dcgs)).
|
:- use_module('src/prolog/lib/dcgs').
|
||||||
:- use_module(library(lists)).
|
:- use_module('src/prolog/lib/lists').
|
||||||
|
|
||||||
:- attribute zdd_vs/2.
|
:- attribute zdd_vs/2.
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,9 @@
|
|||||||
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
:- use_module(library(dcgs)).
|
:- use_module('src/prolog/lib/dcgs').
|
||||||
:- use_module(library(dif)).
|
:- use_module('src/prolog/lib/dif').
|
||||||
:- use_module(library(lists)).
|
:- use_module('src/prolog/lib/lists').
|
||||||
|
|
||||||
pl_resolution(Clauses0, Chain) :-
|
pl_resolution(Clauses0, Chain) :-
|
||||||
maplist(sort, Clauses0, Clauses), % remove duplicates
|
maplist(sort, Clauses0, Clauses), % remove duplicates
|
||||||
|
|||||||
@@ -692,7 +692,10 @@ pub(crate) trait CallPolicy: Any {
|
|||||||
return_from_clause!(machine_st.last_call, machine_st)
|
return_from_clause!(machine_st.last_call, machine_st)
|
||||||
}
|
}
|
||||||
&BuiltInClauseType::Eq => {
|
&BuiltInClauseType::Eq => {
|
||||||
machine_st.fail = machine_st.eq_test();
|
let a1 = machine_st[temp_v!(1)].clone();
|
||||||
|
let a2 = machine_st[temp_v!(2)].clone();
|
||||||
|
|
||||||
|
machine_st.fail = machine_st.eq_test(a1, a2);
|
||||||
return_from_clause!(machine_st.last_call, machine_st)
|
return_from_clause!(machine_st.last_call, machine_st)
|
||||||
}
|
}
|
||||||
&BuiltInClauseType::Ground => {
|
&BuiltInClauseType::Ground => {
|
||||||
|
|||||||
@@ -552,7 +552,7 @@ impl MachineState {
|
|||||||
self.fail = true;
|
self.fail = true;
|
||||||
}
|
}
|
||||||
(Addr::Lis(a1), Addr::Con(Constant::String(ref mut s)))
|
(Addr::Lis(a1), Addr::Con(Constant::String(ref mut s)))
|
||||||
| (Addr::Con(Constant::String(ref mut s)), Addr::Lis(a1)) => {
|
| (Addr::Con(Constant::String(ref mut s)), Addr::Lis(a1)) => {
|
||||||
if match self.flags.double_quotes {
|
if match self.flags.double_quotes {
|
||||||
DoubleQuotes::Chars => self.deconstruct_chars(s, a1, &mut pdl),
|
DoubleQuotes::Chars => self.deconstruct_chars(s, a1, &mut pdl),
|
||||||
DoubleQuotes::Codes => self.deconstruct_codes(s, a1, &mut pdl),
|
DoubleQuotes::Codes => self.deconstruct_codes(s, a1, &mut pdl),
|
||||||
@@ -564,7 +564,7 @@ impl MachineState {
|
|||||||
self.fail = true;
|
self.fail = true;
|
||||||
}
|
}
|
||||||
(Addr::Con(Constant::EmptyList), Addr::Con(Constant::String(ref s)))
|
(Addr::Con(Constant::EmptyList), Addr::Con(Constant::String(ref s)))
|
||||||
| (Addr::Con(Constant::String(ref s)), Addr::Con(Constant::EmptyList))
|
| (Addr::Con(Constant::String(ref s)), Addr::Con(Constant::EmptyList))
|
||||||
if !self.flags.double_quotes.is_atom() =>
|
if !self.flags.double_quotes.is_atom() =>
|
||||||
{
|
{
|
||||||
if s.is_expandable() && s.is_empty() {
|
if s.is_expandable() && s.is_empty() {
|
||||||
@@ -852,11 +852,8 @@ impl MachineState {
|
|||||||
Addr::Con(Constant::String(ref mut s)) => {
|
Addr::Con(Constant::String(ref mut s)) => {
|
||||||
self.fail = self.write_constant_to_string(s, c)
|
self.fail = self.write_constant_to_string(s, c)
|
||||||
}
|
}
|
||||||
Addr::Con(c1) => {
|
Addr::Con(c1) =>
|
||||||
if c1 != c {
|
self.fail = self.eq_test(Addr::Con(c), Addr::Con(c1)),
|
||||||
self.fail = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Addr::Lis(l) => self.unify(Addr::Lis(l), Addr::Con(c)),
|
Addr::Lis(l) => self.unify(Addr::Lis(l), Addr::Con(c)),
|
||||||
addr => {
|
addr => {
|
||||||
if let Some(r) = addr.as_var() {
|
if let Some(r) = addr.as_var() {
|
||||||
@@ -2266,25 +2263,29 @@ impl MachineState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns true on failure.
|
// returns true on failure.
|
||||||
pub(super) fn eq_test(&self) -> bool {
|
pub(super) fn eq_test(&self, a1: Addr, a2: Addr) -> bool {
|
||||||
let a1 = self[temp_v!(1)].clone();
|
|
||||||
let a2 = self[temp_v!(2)].clone();
|
|
||||||
|
|
||||||
let mut iter = self.zipped_acyclic_pre_order_iter(a1, a2);
|
let mut iter = self.zipped_acyclic_pre_order_iter(a1, a2);
|
||||||
|
|
||||||
while let Some((v1, v2)) = iter.next() {
|
while let Some((v1, v2)) = iter.next() {
|
||||||
match (v1, v2) {
|
match (v1, v2) {
|
||||||
(HeapCellValue::NamedStr(ar1, n1, _), HeapCellValue::NamedStr(ar2, n2, _)) => {
|
(HeapCellValue::NamedStr(ar1, n1, _), HeapCellValue::NamedStr(ar2, n2, _)) =>
|
||||||
if ar1 != ar2 || n1 != n2 {
|
if ar1 != ar2 || n1 != n2 {
|
||||||
return true;
|
return true;
|
||||||
}
|
},
|
||||||
}
|
(HeapCellValue::Addr(Addr::Lis(_)), HeapCellValue::Addr(Addr::Lis(_))) =>
|
||||||
(HeapCellValue::Addr(Addr::Lis(_)), HeapCellValue::Addr(Addr::Lis(_))) => continue,
|
continue,
|
||||||
(HeapCellValue::Addr(a1), HeapCellValue::Addr(a2)) => {
|
(HeapCellValue::Addr(Addr::Con(Constant::EmptyList)),
|
||||||
|
HeapCellValue::Addr(Addr::Con(Constant::String(s))))
|
||||||
|
| (HeapCellValue::Addr(Addr::Con(Constant::String(s))),
|
||||||
|
HeapCellValue::Addr(Addr::Con(Constant::EmptyList))) =>
|
||||||
|
return match self.flags.double_quotes {
|
||||||
|
DoubleQuotes::Atom => true,
|
||||||
|
_ => !s.is_empty()
|
||||||
|
},
|
||||||
|
(HeapCellValue::Addr(a1), HeapCellValue::Addr(a2)) =>
|
||||||
if a1 != a2 {
|
if a1 != a2 {
|
||||||
return true;
|
return true;
|
||||||
}
|
},
|
||||||
}
|
|
||||||
_ => return true,
|
_ => return true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3068,7 +3068,7 @@ fn test_queries_on_string_lists() {
|
|||||||
|
|
||||||
// double_quotes is chars by default.
|
// double_quotes is chars by default.
|
||||||
assert_prolog_success!(&mut wam, "variant(\"\", []).");
|
assert_prolog_success!(&mut wam, "variant(\"\", []).");
|
||||||
assert_prolog_failure!(&mut wam, "\"\" == [].");
|
assert_prolog_success!(&mut wam, "\"\" == [].");
|
||||||
assert_prolog_failure!(&mut wam, "\"abc\" == [].");
|
assert_prolog_failure!(&mut wam, "\"abc\" == [].");
|
||||||
assert_prolog_success!(&mut wam, "variant(\"abc\", ['a', 'b', 'c']).");
|
assert_prolog_success!(&mut wam, "variant(\"abc\", ['a', 'b', 'c']).");
|
||||||
assert_prolog_success!(&mut wam, "variant(\"abc\", ['a', 'b', c]).");
|
assert_prolog_success!(&mut wam, "variant(\"abc\", ['a', 'b', c]).");
|
||||||
|
|||||||
Reference in New Issue
Block a user