diff --git a/library/lineutils.yap b/library/lineutils.yap new file mode 100644 index 000000000..7bb0b594f --- /dev/null +++ b/library/lineutils.yap @@ -0,0 +1,36 @@ +:- module(line_utils, + [search_for/3, + scan_natural/3, + split/3 + ]). + +:- use_module(library(lists), + [member/2]). + + +search_for(C) --> [C], !. +search_for(C) --> [_], + search_for(C). + +scan_natural(N) --> + scan_natural(0, N). + +scan_natural(N0,N) --> + [C], + {C >= 0'0, C =< 0'9 }, !, + { N1 is N0*10+(C-0'0) }, + get_natural(N1,N). +scan_natural(N,N) --> []. + +split(String, SplitCodes, [S|Strings]) :- + split(SplitCodes, S, Strings, String, []). + +split(SplitCodes, [], [New|Set]) --> + [C], + { member(C, SplitCodes) }, !, + split(SplitCodes, New, Set). +split(SplitCodes, [C|New], Set) --> + [C], !, + split(SplitCodes, New, Set). +split(_, [], []) --> []. +