简体   繁体   中英

Prolog Predicate that returns Sum of weights of items in a list

I want to write a prolog predicate that takes in a list of items, searches for the weights of these items, and returns their sum. I got the corresponding weights but I don't know how to get the sum in the predicate it's not working.

This is my very first project in Prolog so I'm still learning. Thank you:)

weight(mum,60).
weight(dad,85).
weight(alfie,20).
weight(bianca,25).
weight(daisy,50).
weight(puppy,10).
list_sum([],0).
list_sum([Head|Tail], TotalSum):-
    list_sum(Tail, Sum1),
    TotalSum is Head+Sum1.

total_weight([], []).
total_weight([H_entity | T_entity], [H_weight | T_weight]) :-
    weight(H_entity, H_weight),
    total_weight(T_entity, T_weight).

This returns a list of the weights of the items given. I tried getting the sum but it didn't work.
The output I am looking for is total_weight([mum,dad,puppy],W): W=155

Try this:

?- total_weight([mum,dad,puppy], WeightList), sum_list(WeightList, Sum).
WeightList = [60, 85, 10],
Sum = 155.

EDIT

Combining both predicates:

sum_of_weights([], 0).
sum_of_weights([E|Es], S) :-
    sum_of_weights(Es, T),
    weight(E, W),
    S is T + W.

Example:

?- sum_of_weights([mum,dad,puppy], S).
S = 155.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM