Пролог - Как сложить только часть списка внутри другого списка? - PullRequest
2 голосов
/ 20 апреля 2019

Определить рекурсивное правило в виде sum(Lst, Total), который может вычислить сумму из списка заявленных, где Lst в формате [[s1, p1], [s2, p2], … [sn, pn]]

так что я хочу только сумму p и s не числа. как я могу это сделать?

sum([[az, ​7​], [ca, ​40​], [ne, ​3​], [ut, ​3​], [or, ​4​],Total).

должно вернуть Total = 60. но мой код ничего не возвращает

У меня есть

sum([[_,X]|T],Total) :- 
    sum(T,Rest),
    Total is X + Rest. 

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Вам не хватает только базового случая, когда список пуст!

sum([],0).

sum([[_,X]|T],Total) :- 
    sum(T,Rest),
    Total is X + Rest. 

2 голосов
/ 21 апреля 2019

сумма (L, Всего): - всего (L, 0, Всего).

сумма ([], Всего, Всего).

сумма ([[_ | HT]T], Temp, Total): - Temp1 - это темп + HT, всего (T, Temp1, Total).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...