sub_atom/5 のソースは インストールDIR/system/pl/iso_pred.pl で公開していますが、
定義に一部誤りがありました。今回のリリースには間に合いませんでしたので、次回リリースでは
そのほかのISO述語の見直しを含め修正します。
とりあえずは次の定義をお使いいただければ他処理系同等となりますが、述語名が衝突しますので
new_sub_atom/5 とでも書き直してお使いください。
%%%%%%%%%%%
sub_atom(Atom,Start,GetLen,RightLen,Ans):-
(atom(Atom) -> name(Atom,List) ; error(9) ),
(var(Start) -> true; Start >=0 ),
(var(GetLen) -> true; GetLen >=0 ),
(var(RightLen) -> true; RightLen >=0 ),
sub_atom_aux(List,0,Start,RightList,_),
sub_atom_aux(RightList,0,GetLen,RightList2,AnsList),
length(RightList2,RightLen),
atom_codes(Ans,AnsList).
sub_atom_aux(List,E,E,List,[]).
sub_atom_aux([A|List],N,E,LList,[A|R]):-
NN is N+1,sub_atom_aux(List,NN,E,LList,R).