このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1294641578/409
#  数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、 
#  ひとつのテーブルを得たいのだが、そんなことって1クエリだけでできる? 
# 

'数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、ひとつのテーブルを得たい'(_テーブル1,_テーブル2,_テーブル3) :-
        テーブル述語(_テーブル1,P1),
        テーブル述語(_テーブル2,P2),
        findall(L1,P1,LL1),
        findall(L2,P2,LL2),
        ならび同士を掛けあわせる(LL1,LL2,LL3),
        節を追加する(_テーブル3,LL3).

テーブル述語(_テーブル,P) :-
        findall(_,(
                    テーブル構造(_テーブル,_,_)),
                L),
        P =.. [_テーブル|L],!.

ならび同士を掛けあわせる([],[],[]) :- !.
ならび同士を掛けあわせる([L1|R1],[L2|R2],[L3|R3]) :-
        list(L1),
        list(L2),
        ならび同士を掛けあわせる(L1,L2,L3),
        ならび同士を掛けあわせる(R1,R2,R3),!.
ならび同士を掛けあわせる([N1|R1],[N2|R2],[N3|R3]) :-
        number(N1),
        number(N2),
        N3 is N1 * N2,
        ならび同士を掛けあわせる(R1,R2,R3).

節を追加する(_テーブル,LL) :-
        append(_,[L|R],LL),
        P =.. [_テーブル|L],
        assertz(P),
        R = [].