私はこの初心者の問題に遭遇しました、そして私はこれを解決する方法を知りません。これが私のコードです:
worker( w1, d1, 2000 ) .
worker( w2, d1, 2500 ) .
worker( w2, d2, 1000 ) .
worker( w3, d2, 2000 ) .
worker( w4, d2, 4000 ) .
% worker( W, D, S ) means that worker W works in department D and has salary S
department( d1, w2 ) .
department( d2, w4 ) .
% department( D, B ) means that worker B is director of department D(this is not important in this case)
次のように、部門の1つからすべての給与の合計を取得する必要があります。
?- department_costs( d1 , T ) .
T = 4500;
no
?- department_costs( D, T ) .
D = d1
T = 4500;
D = d2
T = 7000;
no
?- department_costs( d3 , T ) .
no
私はこれを試しました:
department_costs( D, T ):- worker( _X, D, T1 ), T is T1.
そして私はこれを手に入れます:
?- department_costs( o1, T ).
T=2000;
T=2500;
no
今度は総費用としてT+Tを合計する必要がありますが、その方法がわかりません。findall / setof/bagofを使用せずにこれを解決したいと思います。
編集:
私はfindallで試しました:
sumL([], 0).
sumL([G|R], S):-
sumL(R, S1),
S is S1 + G.
department_costs( D, T ):-
findall(P, worker( _X, D, P ), R ),
sumL(R, S),
T=S.
これは、department_costs(d1、T)およびdepartment_costs(d2、T)で正常に機能しますが、department_costs(D、T)と入力すると正常に機能します。私はこれを手に入れます:
department_costs( D, T ).
O=_h159
T=11500
そしてそれはこのようになるはずです:
?- department_costs( D, T ) .
D = d1
T = 4500;
D = d2
T = 7000;
誰かが今何が問題なのか教えてもらえますか?