>>114 Prolog

'文字列Aを1回以上繰り返した文字列Bが与えられたとき文字列Aを求める。
ただしAの候補が複数ある場合は最短のものとする。'('',_) :- !.
'文字列Aを1回以上繰り返した文字列Bが与えられたとき文字列Aを求める。
ただしAの候補が複数ある場合は最短のものとする。'(_文字列B,_文字列A) :-
    先頭からの文字列パターン(_文字列B,_文字列A,_残り文字列),
    '文字列Aを1回以上繰り返した文字列Bが与えられたとき文字列Aを求める。
ただしAの候補が複数ある場合は最短のものとする。'(_残り文字列,_文字列A),!.


先頭からの文字列パターン(_文字列,_先頭からの文字列パターン,_残り文字列) :-
    sub_atom(_文字列,0,Len,_残り文字数,_先頭からの文字列パターン),
    \+(Len = 0),
    sub_atom(_文字列,_,_残り文字数,0,_残り文字列).