このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/410
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク): http://codepad.org/ZtuWkxys 
#  
#  //決まった形式のテキストを9×9の配列に1~9の数字の情報を入力する関数aa_readを作りたいです。
#  //たとえば1を読み込めばビットで000000001を、4を読み込めば000001000を、
#  //つまりビットの1の位置を数字に対応させています。
#  //そして「.」を読み込めば特別に111111111を構造体aa_tのcellに入力します。
#  //r,cは行と列に対応しています。下のテキストファイルの内容と、入力する盤面の位置は対応させます。
#  //読み込む形式はテキストファイルで、内容はたとえば下のようなものです。
#  //123|..1|43.
#  //4..|24.|31.
#  //..7|7.6|...
#  //---+---+---
#  //...|..8|5..
#  //5.1|1..|1..
#  //5.9|2..|3.4
#  //---+---+---
#  //41.|..1|1.1
#  //..5|.3.|4..
#  //2..|...|..7
#  //テキストファイルから1文字ずつfgetcで走査していき数字のみ拾って、
#  //aa_tのcellの正しい位置にその情報を入れる、という動作をさせたいのですが、
#  //どうもうまくいきません。よろしくお願いします
#  

'決まった形式のテキストを9×9の配列に1~9の数字の情報を入力する'(_テキストファイル,LL) :-
        length(LL,9),
        findall(L,(
                      length(L,9),
                      append(_,[L|_],LL)),
                LL),
        open(_テキストファイル,read,Instream),
        '数字のみ拾って、cellの正しい位置にその情報を入れる'(Instream,LL),
        close(Instream).

'数字のみ拾って、cellの正しい位置にその情報を入れる'(Instream,LL) :-
        findall(L,(
                    append(_,[L|_],LL),
                    findall(_数値ビット表現,(
                                append(_,[_|_],L),
                                '数字かドットを読み込む'(Instream,_数値ビット表現)),
                            L)),
               LL).

'数字かドットを読み込む'(Instream,_数値ビット表現) :-
        at_end_stream(Instream),!,
        fail.
'数字かドットを読み込む'(Instream,_数値ビット表現) :-
        get_char(Instream,_数字かドット),
        数値ビット表現(_数字かドット,_数値ビット表現),!.
'数字かドットを読み込む'(Instream,_数値ビット表現) :-
        '数字かドットを読み込む'(Instream,_数値ビット表現).

数値ビット表現('0',0).
数値ビット表現('1',1).
数値ビット表現('2',2).
数値ビット表現('3',4).
数値ビット表現('4',8).
数値ビット表現('5',16).
数値ビット表現('6',32).
数値ビット表現('7',64).
数値ビット表現('8',128).
数値ビット表現('9',256).
数値ビット表現('.',511).

数値ビット表現述語の生成 :-
        append(_,[A|R],['0b0','0b1','0b10','0b100','0b1000','0b10000','0b100000','0b1000000','0b10000000','0b100000000','0b111111111']),
       atom_to_term(A,N,_),
       sub_atom(A,2,Len,0,B),
       wr('数値ビット表現(''%t'',%t).\n',[Len,N]),
       R =[].