1:- module(type_stringy,[stringy/1]). 2
3:- current_module(arithmetic_types) -> true ; use_module(library(arithmetic_types)). 6:- current_module(type_list)
7 -> true
8 ; reexport(library(type_list)). 9
10:- arithmetic_function(string/1). 11:- arithmetic_function([]/1). 12:- arithmetic_function([]/2). 13:- arithmetic_function(\\ /2). 14:- arithmetic_function(string_length/1). 15:- arithmetic_function(find/2). 16
20stringy(T) :- (string(T) ; atom(T)), !.
21
25string(Term,S) :-
26 (string(Term) -> S=Term ; term_string(Term,S)). 27
31[](St, St) :- stringy(St).
32[]([B:E],St,X) :- stringy(St),
33 string_length(St,Len), 34 slice_parameters(B:E,Len,SB,SL), !,
35 sub_string(St, SB, SL, _, X). 36[]([Ix],St,X) :- stringy(St),
37 string_length(St,Len),
38 index_parameters(Ix,Len,I),
39 sub_string(St, I, 1, _, SS), !,
40 string_chars(SS,[X]). 41
45\\(S1,S2,R) :- stringy(S1), stringy(S2), 46 string_concat(S1,S2,R), !. 47
51find(Sub,S,R) :- stringy(Sub), stringy(S), 52 (sub_string(S,R,_,_,Sub)
53 -> true
54 ; R= -1 55 )