fields/ library predicate, to return empty fields.
This commit is contained in:
parent
0b85333018
commit
a69a34f3a5
31
docs/yap.tex
31
docs/yap.tex
@ -8854,6 +8854,37 @@ S = ["Hello","I","am","free"] ?
|
|||||||
no
|
no
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@item split(+@var{Line},-@var{Split})
|
||||||
|
@findex split/2
|
||||||
|
@snindex split/2
|
||||||
|
@cnindex split/2
|
||||||
|
|
||||||
|
Unify @var{Words} with a set of strings obtained from @var{Line} by
|
||||||
|
using the blank characters as separators.
|
||||||
|
|
||||||
|
@item fields(+@var{Line},+@var{Separators},-@var{Split})
|
||||||
|
@findex fields/3
|
||||||
|
@snindex fields/3
|
||||||
|
@cnindex fields/3
|
||||||
|
|
||||||
|
Unify @var{Words} with a set of strings obtained from @var{Line} by
|
||||||
|
using the character codes in @var{Separators} as separators for
|
||||||
|
fields. If two separators occur in a row, the field is considered
|
||||||
|
empty. As an example, consider:
|
||||||
|
@example
|
||||||
|
?- fields("Hello I am free"," *",S).
|
||||||
|
|
||||||
|
S = ["Hello","","I","am","","free"] ?
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@item fields(+@var{Line},-@var{Split})
|
||||||
|
@findex fields/2
|
||||||
|
@snindex fields/2
|
||||||
|
@cnindex fields/2
|
||||||
|
|
||||||
|
Unify @var{Words} with a set of strings obtained from @var{Line} by
|
||||||
|
using the blank characters as field separators.
|
||||||
|
|
||||||
@item glue(+@var{Words},+@var{Separator},-@var{Line})
|
@item glue(+@var{Words},+@var{Separator},-@var{Line})
|
||||||
@findex glue/3
|
@findex glue/3
|
||||||
@snindex glue/3
|
@snindex glue/3
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
scan_integer/3,
|
scan_integer/3,
|
||||||
split/2,
|
split/2,
|
||||||
split/3,
|
split/3,
|
||||||
|
fields/2,
|
||||||
|
fields/3,
|
||||||
glue/3,
|
glue/3,
|
||||||
copy_line/2,
|
copy_line/2,
|
||||||
filter/3,
|
filter/3,
|
||||||
@ -69,6 +71,28 @@ split(SplitCodes, [C|New], Set) -->
|
|||||||
split(SplitCodes, New, Set).
|
split(SplitCodes, New, Set).
|
||||||
split(_, [], []) --> [].
|
split(_, [], []) --> [].
|
||||||
|
|
||||||
|
fields(String, Strings) :-
|
||||||
|
fields(" ", Strings, String, []).
|
||||||
|
|
||||||
|
fields(String, FieldsCodes, Strings) :-
|
||||||
|
dofields(FieldsCodes, First, More, String, []),
|
||||||
|
(
|
||||||
|
First = [], More = []
|
||||||
|
->
|
||||||
|
Strings = []
|
||||||
|
;
|
||||||
|
Strings = [First|More]
|
||||||
|
).
|
||||||
|
|
||||||
|
dofields(FieldsCodes, [], New.More) -->
|
||||||
|
[C],
|
||||||
|
{ member(C, FieldsCodes) }, !,
|
||||||
|
dofields(FieldsCodes, New, More).
|
||||||
|
dofields(FieldsCodes, [C|New], Set) -->
|
||||||
|
[C], !,
|
||||||
|
dofields(FieldsCodes, New, Set).
|
||||||
|
dofields(_, [], []) --> [].
|
||||||
|
|
||||||
glue([], _, []).
|
glue([], _, []).
|
||||||
glue([A], _, A) :- !.
|
glue([A], _, A) :- !.
|
||||||
glue([H|T], [B|_], Merged) :-
|
glue([H|T], [B|_], Merged) :-
|
||||||
|
Reference in New Issue
Block a user