/* Number of ancestors and generation traced To grasp general aspect of the pedigree. file name; sosensuu.txt zenbu(entry); Total ancestors in pedigree zenbu2(entry); do, except common one sedai(entry); Maximum generation traced Look the final figure. Parent data are same as in pedigree tree data Combine this file to coefficient of inbreeding/parentage file ike; for many entries. Log it to 'out.txt'. home; www.d1.dion.ne.jp/~tmhk/yosida.htm T.Yoshida 2005.2.25 ike 2005.4.30 ike,modified 08.9.17 */ ike:-sedai('kosihikari'). ike:-sedai('hinohikari'). ike:-sedai('nagoyutaka'). /* Total ancestors */ zenbu(A):-motoni,sosu(A). zenbu(A):-write(' <= total sosen no kazu ******* '),write(A),nl. sosu(A):-pama(A,X),write(X),kazu(N),tab(1),write(N),sosu(X). pama(X,Y):-tab(1),mama(X,Y). pama(X,Y):-papa(X,Y). mama(A,X):-rr(A,X,_). papa(A,X):-rr(A,_,X),nl. azukari(0). kazu(N):-azukari(M),N is M+1,retract(azukari(M)),assert(azukari(N)). motoni:-retract(azukari(N)),assert(azukari(0)). /* Unique one */ zenbu2(A):-motoni2,sosu2(A). zenbu2(A):-write(' <= kyotu nozoita sosen no kazu ***** '),write(A),nl,motohe. motohe:-retract(fu(X)),fail,!. fu('du1'). sosu2(A):-fue(A),pama2(A,X),write(X),kazu2(N),tab(1),write(N),sosu2(X). pama2(X,Y):-tab(1),mama2(X,Y). pama2(X,Y):-papa2(X,Y). mama2(A,X):-rr(A,X,_). papa2(A,X):-rr(A,_,X),nl. fue(A):-fu(A),write(' - shown '),hiku(N),!,fail;assert(fu(A)). azukari2(0). kazu2(N):-azukari2(M),N is M+1,retract(azukari2(M)),assert(azukari2(N)). hiku(N):-azukari2(M),N is M-1,write(N),retract(azukari2(M)),assert(azukari2(N)). motoni2:-retract(azukari2(N)),assert(azukari2(0)). /* Generation */ sed(0). sedai(A):-assert(azukari7(0)),fail. sedai(A):-motoni4,saishu(A),fail. sedai(A):-sed(K),write(K),tab(1),fail,!. sedai(A):-nl,write(' '),write(A),write(' saidai sedai suu => ***** '),hikaku,fail. hikaku:-sed(K),hikaku2(K),fail,!. hikaku2(K):-azukari7(M),K > M -> assert(azukari7(K)),retract(azukari7(M));!. sedai(A):-azukari7(M),N is M + 1,write(N),nl,fail. sedai(A):-retract(azukari7(M)),fail. sedai(A):-motoni3. pama3(X,Y):-tab(1),mama3(X,Y),kazu3(N). pama3(X,Y):-papa3(X,Y),kazu4(N). pama3(X,Y):-kazu5(N),fail. mama3(A,X):-rr(A,X,_),azukari6(K),write(K),assert(sed(K)),tab(1). papa3(A,X):-rr(A,_,X),azukari6(K),write(K),assert(sed(K)),tab(1),nl. azukari6(K):-azukari3(N),azukari4(M),azukari5(J),K is N+M-J. saishu(A):-pama3(A,X),write(X),saishu(X). azukari3(0). azukari4(0). azukari5(0). kazu7(M,L):-azukari7(M),retract(azukari7(M)),assert(azukari7(L)). kazu5(N):-azukari5(M),N is M+1,retract(azukari5(M)),assert(azukari5(N)). kazu4(N):-azukari4(M),N is M+1,retract(azukari4(M)),assert(azukari4(N)). kazu3(N):-azukari3(M),N is M+1,retract(azukari3(M)),assert(azukari3(N)). motoni4:-retract(azukari3(N)),assert(azukari3(0)),retract(azukari4(M)), assert(azukari4(0)),retract(azukari5(J)),assert(azukari5(0)). motoni3:-retract(sed(X)),fail,!. /* Parents data */ rr('entry','f_parent','m_parent').