このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1248012902/53
# 【 課題 】
# 以下のURLから正規表現を用いてキーワードの部分のみ抽出する
# プログラムを作成せよ。
#
# http://www.google.co.jp/search?q=キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=trls=org.mozilla:ja:official&client=firefox-a

% Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を
% 使ってみる。

t571(URL,_キーワード) :-
    sub_atom(URL,_,_,_,_,'?q=',G,_,_,_),
    sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!.

% ユーティリティ述語 sub_atom/10 の提案
%
% A .. 文字列 (atom)
% S .. 検索文字列開始変位 (integer)
% L .. 検索文字列の長さ (integer)
% R .. 残り長さ (integer)
% H .. 検索文字列より前側の文字列 (atom)
% X .. 検索文字列 (atom)
% T .. 検索文字列より後の残り文字列 (atom)
% HL .. 検索文字列より前側の文字ならび (chars)
% XL .. 検索文字列文字ならび (chars)
% TL .. 検索文字列より後の残り文字ならび (chars)
% A がvarである時はH-HL,X-XL,T-TLの3組の中にvar-varの組があってはなりません。 

sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :-
    atom(A),
    !,
    sub_atom(A,S,L,R,X),
    sub_atom(A,0,S,_,H),
    N is S + L,
    sub_atom(A,N,R,_,T),
    atom_chars(H,HL),
    atom_chars(X,XL),
    atom_chars(T,TL).

sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :-
    var(A),
    !,
    atom_chars(H,HL),
    atom_chars(X,XL),
    atom_chars(T,TL),
    length(HL,S),
    length(XL,L),
    length(TL,R),
    concat_atom([H,X,T],A),
    sub_atom(A,S,L,R,H,X,T,HL,XL,TL).