このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1255709298/561 
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10060.txt
t2_14(File) :- get_lines(File,Lines),member(_行,Lines),split(_行,[','],L),構造追加(L),fail. 
t2_14(_). 

索引番号起点(-1). 
索引番号終点(-1). 

構造追加(L) :- 索引番号終点(_索引番号終点),構造追加(L,_索引番号終点). 

構造追加([A|R]) :- Random is random mod 9999,\+(index(Random,A,-1)), 
    assertz(index(Random,A,-1)), 
    length(R,Len), 
    assertz(num(Random,Len)), 
    attr定義(1,Len,Random,R),!. 
    retract(索引番号終点(_索引終点番号)), 
    構造追加_2(_索引終点番号,Random). 
構造追加([A|R]) :- 構造追加([A|R]). 

構造追加_2(-1,Random) :- retract(索引番号起点(_索引起点番号)),assertz(索引番号起点(Random)),assertz(索引番号終点(Random)),!. 
構造追加_2(N,Random) :- assertz(索引番号終点(Random)),retract(index(N,W2,_)),assertz(index(N,W2,Random)),!.

attr定義(M,N,A,[]) :- M > N,!. 
attr定義(M,N,A,[B|R]) :- assertz(attr(A,M,B)),M2 is M+1,attr定義(M2,N,A,R).