初心者ですので初歩的な質問をさせていただきます。よろしくお願いします。
prologで単純な迷路を説くのは簡単ですが、縦横につながった升目(または碁石など)の数を数えるプログラムに難渋しています。
他の言語に習って、5個つながっているかどうかを、

heisa1(5,_,_,_,_,_,_,_):-!.
heisa1(N,W,H,X,Y,Field,L0,L):-
getv(W,H,X,Y,Field,V)
,(var(V)->((not(member((X,Y),L))->(adde((X,Y),L,L1),N1 is N+1);(N1=N,L1=L))
,(X<W->(X1 is X+1,heisa1(N1,W,H,X1,Y,Field,L0,L1)))
,(Y<H->(Y1 is Y+1,heisa1(N1,W,H,X,Y1,Field,L0,L1)))
,(X>1->(X1 is X-1,heisa1(N1,W,H,X1,Y,Field,L0,L1)))
,(Y>1->(Y1 is Y-1,heisa1(N1,W,H,X,Y1,Field,L0,L1))))).

のような書き方で、細部をいろいろ工夫しても、無駄なバックトラックが起こってうまくいきません。
どのように書けばよいのでしょうか。ご教示いただければ幸です。