このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/10
#  [1] 授業単元:情報通信 
#  [2] 問題文(含コード&リンク): 
#  サーバープログラム(英文清書サーバーの作成) 
#  クライアントから送信された(大文字小文字が乱雑な)英文字文字列を次のように変換して送り返す。 
#   分の先頭の文字:大文字 
#   分の先頭以外の文字:小文字 
#   アルファベット以外:変換しない 
#  改行、スペース、タブにより単語の区切りとする。また、文末は改行コードではなく、ピリオド"."で判定する。 
#  ポート番号は1202番 
#  クライアントから接続されると、[Beautify Server Ready]を送信する。 
#  "\end"または"\END"を送信すると、[Beautify Server Closed]を送信してコネクションを切断する。 
#   
#  このサーバーの目的(英文の清書)の範囲内で、高機能にすること(例えば単独の"I"を大文字にする、連続した空白文字を1つのスペースにする、など)を歓迎する。 
#  

舫い(1202).

'サーバープログラム(英文清書サーバーの作成)' :-
        舫い(_舫い),
        接続待ち(_差込み,_舫い),
        接続(_差込み,Host,Port2,_新しい差込み,_入力,_出力),
        get_chars(_入力,_文字s),
        文字変換(_文字s,_文字s2),
        put_list(_出力,_文字s2),
        終了(_差込み,_新しい差込み,_入力,_出力),!.

接続待ち(_差込み,_舫い) :-
        socket(internet, stream, _差込み),
        socket_bind(_差込み,_舫い),
        socket_listen(_差込み),!.

接続(_差込み,_クライアント,_新しい舫い,_新しい差込み,_入力,_出力) :-
        socket_accept(_差込み,_クライアント:_新しい舫い,_新しい差込み),
        open(_新しい差込み,read,_入力),
        open(_新しい差込み,write,_出力),!.

文字変換(_文字ならび,_文字ならびの二) :-
        append(L0,[_文字|R],_文字ならび),
        大文字または小文字(_文字),
        to_upper(_文字,_大文字),
        文字変換_2(R,R2),
        append(L0,[_文字2|R2],_文字ならびの二),!.

文字変換_2(['.'|_],['.']) :- !.
文字変換_2([_文字|R1],[_小文字|R2]) :-
        to_lower(_文字,_小文字),
        文字変換_2(R1,R2).

大文字または小文字(_文字) :- _文字 @>= 'a',char @=< 'z',!.
大文字または小文字(_文字) :- _文字 @>= 'A',char @=< 'Z',!.

終了(_差込み,_新しい差込み,_入力,_出力) :-
        掃きだし(_出力),
        close(_入力),
        close(_出力),
        socket_shutdown(_差込み),
        socket_shutdown(_新しい差込み).

掃きだし(_出力) :-
        flush_out(_出力).

差込み(A,B,C) :- socket(A,B,C).