From 02b89362b23ffff2f7fb881e74d5f2bfd5792266 Mon Sep 17 00:00:00 2001 From: panasenco Date: Sun, 25 Apr 2021 14:53:37 -0700 Subject: [PATCH] Replaced raw_chars//1 in library(pio) with seq//1 in library(dcgs). --- src/lib/dcgs.pl | 12 +++++++++++- src/lib/pio.pl | 15 +-------------- src/tests/json/test_json.pl | 2 +- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/lib/dcgs.pl b/src/lib/dcgs.pl index 07b82b95..e1751d8c 100644 --- a/src/lib/dcgs.pl +++ b/src/lib/dcgs.pl @@ -1,7 +1,9 @@ :- module(dcgs, [op(1105, xfy, '|'), phrase/2, - phrase/3]). + phrase/3, + seq//1, + seqq//1]). :- use_module(library(error)). :- use_module(library(lists), [append/3]). @@ -178,3 +180,11 @@ user:term_expansion(Term0, Term) :- nonvar(Term0), dcg_rule(Term0, (Head :- Body)), Term = (Head :- Body). + +% Describes a sequence +seq([]) --> []. +seq([E|Es]) --> [E], seq(Es). + +% Describes a sequence of sequences +seqq([]) --> []. +seqq([Es|Ess]) --> seq(Es), seqq(Ess). diff --git a/src/lib/pio.pl b/src/lib/pio.pl index 9e57dabe..1df9a796 100644 --- a/src/lib/pio.pl +++ b/src/lib/pio.pl @@ -1,6 +1,5 @@ :- module(pio, [phrase_from_file/2, - phrase_from_file/3, - raw_chars//1]). + phrase_from_file/3]). :- use_module(library(dcgs)). :- use_module(library(error)). @@ -44,15 +43,3 @@ reader_step(Stream, Pos, Xs0) :- partial_string(Cs, Xs0, Xs), stream_to_lazy_list(Stream, Xs) ). - -/* Relate a character list to itself greedily - for reading raw file contents using `phrase_from_file/2` - A quick benchmark: - Greedy (recurse first): - ?- time(phrase_from_file(raw_chars(_), '/mnt/544KB.json')). - % CPU time: 22.471 seconds - Generous (empty list first): - ?- time(phrase_from_file(raw_chars(_), '/mnt/544KB.json')). - % CPU time: 44.119 seconds -*/ -raw_chars([C|Cs]) --> [C], raw_chars(Cs). -raw_chars([]) --> []. diff --git a/src/tests/json/test_json.pl b/src/tests/json/test_json.pl index e03a3cfd..e41688ca 100644 --- a/src/tests/json/test_json.pl +++ b/src/tests/json/test_json.pl @@ -42,7 +42,7 @@ minify_sample_json :- test_json_minify :- test_path("pass_everything.min.json", MinPath), - once(phrase_from_file(raw_chars(RefChars), MinPath)), + once(phrase_from_file(seq(RefChars), MinPath)), name_parse("pass_everything.json", Json), time(once(phrase(json_chars(Json), MinChars))), RefChars = MinChars. -- 2.54.0