From d066765248bac4d9f579598817e14b9690098373 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 28 Apr 2019 14:48:12 -0600 Subject: [PATCH] add subsumes_term/2 --- Cargo.toml | 2 +- README.md | 1 + src/prolog/lib/builtins.pl | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 46257588..fbd78ddb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "scryer-prolog" -version = "0.8.71" +version = "0.8.72" authors = ["Mark Thom "] repository = "https://github.com/mthom/scryer-prolog" description = "A modern Prolog implementation written mostly in Rust." diff --git a/README.md b/README.md index aa047a76..da580e50 100644 --- a/README.md +++ b/README.md @@ -223,6 +223,7 @@ The following predicates are built-in to Scryer. * `setup_call_cleanup/3` * `sort/2` * `string/1` +* `subsumes_term/2` * `term_expansion/2` * `term_variables/2` * `throw/1` diff --git a/src/prolog/lib/builtins.pl b/src/prolog/lib/builtins.pl index 7a4a09f9..3a8d81e7 100644 --- a/src/prolog/lib/builtins.pl +++ b/src/prolog/lib/builtins.pl @@ -17,8 +17,8 @@ expand_goal/2, expand_term/2, false/0, findall/3, findall/4, get_char/1, halt/0, number_chars/2, once/1, op/3, read_term/2, repeat/0, retract/1, set_prolog_flag/2, setof/3, - term_variables/2, throw/1, true/0, write/1, write_canonical/1, - write_term/2, writeq/1]). + subsumes_term/2, term_variables/2, throw/1, true/0, write/1, + write_canonical/1, write_term/2, writeq/1]). % module resolution operator. :- op(600, xfy, :). @@ -815,3 +815,11 @@ number_chars(N, Chs) :- '$number_to_chars'(N, Chsx), Chsx = Chs ). + +subsumes_term(General, Specific) :- + \+ \+ ( + term_variables(Specific, SVs1), + General = Specific, + term_variables(SVs1, SVs2), + SVs1 == SVs2 + ). -- 2.54.0