このディレクトリの索引

%   IF/Prolog と SWI-Prolog の互換性を保つための述語変換
%%% IF/Prolog --> SWI-Prolog %%%


%%% IF/Prolog --> SWI-Prolog %%%

write_formatted(Format,Arguments) :- writef(Format,Arguments).

write_formatted(Stream,Format,Arguments) :-
        swritef(Atom,Format,Arguments),
        write(Stream,Atom).

write_formatted_atom(String,Format,Arguments) :-
        swritef(String,Format,Arguments).

list_nth(Nth,L,A) :-
        nth1(Nth,L,A).

user_parameters(UserParameterList) :-
        current_prolog_flag(argv,ParameterList),
        append(_,['--'|UserParameterList],ParameterList).

system(Command,X) :-
        shell(Command,X).

system(Command) :-
        shell(Command).

popen(Command,Chars) :-
        open(pipe(Command),read,Instream),
        get_char(Instream,Char),
        popen(Instream,Char,Chars),
        close(Instream),!.

popen(Instream,end_of_file,[]) :- !.
popen(Instream,Char,[Char|R]) :-
        get_char(Instream,Char2),
        popen(Instream,Char2,R).

shs(Command,X) :-
        popen(Command,L),
        shs_3(L,X).

shs_3(L,[S|R]) :-
        append(L0,['\n'|R1],L),
        atom_chars(S,L0),
        shs_3(R1,R).
shs_3([],[]) :- !.
shs_3(L,[S]) :-
        atom_chars(S,L).

parse_atom(Atom,S,E,Term,Varlist,Error) :-
        S_1 is S - 1,
        Len is (E - S) + 1,
        sub_atom(Atom,S_1,Len,_,Atom_1),
        atom_to_term(Atom_1,Term,Varlist).

parse_atom(Atom,S,Term,Varlist) :-
        atom_to_term(Atom,Term,Varlist).

digit(A) :-
        member(A,['0','1','2','3','4','5','6','7','8','9']).

atomic(A) :- atom(A),!.
atomic(A) :- number(A),!.

real(V) :- float(V).

number(A,B) :- number_codes(A,B).

list(L) :-
        \+(var(L)),
        L = [_|_],!.
list(L) :-
        \+(var(L)),
        L = [],!.

% *** user: cut_same / 2 ***
cut_same([],[]).
cut_same([_要素|_残り対象ならび],_重複を削除されたならび) :-
    cut_same(_残り対象ならび,_重複を削除されたならび),
    要素(_要素,_重複を削除されたならび),!.
cut_same([_要素|_残りの対象ならび],[_要素|_残りの重複を削除されたならび]) :-
    cut_same(_残りの対象ならび,_残りの重複を削除されたならび),!.

get_bytes(_ファイル,Bytes) :-
        open(_ファイル,read,Instream,[type(binary)]),
        findall(Byte,(
                    repeat,(
                        at_end_of_stream(Instream),
                        !,
                        fail;
                        get_byte(Instream,Byte))),
                Bytes),
        close(Instream),!.

put_bytes(_ファイル,Bytes) :-
        open(_ファイル,write,Outstream,[type(binary)]),
        append(_,[Byte|R],Bytes),
        put_byte(Outstream,Byte),
        R = [],
        close(Outstream),!.


% *** user: max / 2 ***
max([A|R],X) :-
    max_1(R,A,X) .

max_1([],X,X) :-
    !.
max_1([A|R],B,X) :-
    A @> B,
    !,
    max_1(R,A,X).
max_1([_|R],A,X) :-
    max_1(R,A,X).

min([A|R],X) :-
    min_1(R,A,X) .

min_1([],X,X) :-
    !.
min_1([A|R],B,X) :-
    A @< B,
    !,
    min_1(R,A,X).
min_1([_|R],A,X) :-
    min_1(R,A,X).

for(S,N,E) :-
        E >= S,
        between(S,E,N).

for(S,N,E) :-
        E < S,
        for_1(S,N,E).

for_1(S,_,E) :- S < E,!,fail.
for_1(N,N,E).
for_1(S,N,E) :- S1 is S - 1,for_1(S1,N,E).

error_protect(P,F) :- catch(P,_,F).

length_cut(L,Len) :-
        length(L,Len),!.