0
私は練習問題に取り組んでいます。ここでは、右、上、下、左に開くセルの数を見つける必要があります。私は実用的な解決策を持っていますが、私はそれを節に変えたいと思います。私はifとelseを定義するために - >を使いたくありません。ソリューションに影響を与えることなく、以下のコードをどのように修正できますか?あなたのcontains1/2
述語がちょうど標準member/2
あるプロローグ内の句への変換方法
stats(U,D,L,R) :- maze(Size,_,_,_,_),
findall(R, genXY(Size,R), Out),
statsHelp(Out,U, L, R, D).
statsHelp([],0,0,0,0).
statsHelp([[X|[Y]]|Tl],U, L, R, D) :- cell(X,Y,Dirs,Wt),
(contains1(u,Dirs) -> U1 is 1; U1 is 0), % how do i remove -> and separate them into clauses?
(contains1(d,Dirs) -> D1 is 1; D1 is 0),
(contains1(l,Dirs) -> L1 is 1; L1 is 0),
(contains1(r,Dirs) -> R1 is 1; R1 is 0),
statsHelp(Tl,U2, L2, R2, D2),
U is U1 + U2,
D is D1 + D2,
R is R1 + R2,
L is L1 + L2.
contains1(V,[V|Tl]).
contains1(V,[Hd|Tl]):-
contains1(V,Tl).
[回答](http://stackoverflow.com/a/40035182/1812457)を参照してください。質問は重複していませんでしたが、その答えがあなたにとって有用であるかもしれません。 –