Пролог - подведите итоги «позиционируемого» элемента в списке - PullRequest
1 голос
/ 28 апреля 2010

Я ищу решение следующей проблемы: «Напишите программу Prolog, чтобы суммировать все нечетные позиции в данном списке.»

Пример запроса:

?- odd([1,2,3,4,5],Sum).
Sum = 9.                   % correct as 1+3+5 equals 9

Ответы [ 3 ]

1 голос
/ 26 мая 2015

Прямая реализация:

odd([],0).
odd([X|Xs],S) :- even(Xs,S0), S is S0+X.

even([],0).
even([_|Xs],S) :- odd(Xs,S).

Примеры запросов:

?- odd([],S).
S = 0.

?- odd([1],S).
S = 1.
?- odd([1,_],S).
S = 1.

?- odd([1,_,3],S).
S = 4.
?- odd([1,_,3,_],S).
S = 4.

?- odd([1,_,3,_,5],S).
S = 9.
0 голосов
/ 29 апреля 2010

Сумма элементов с нечетным расположением может быть найдена следующим образом; где списки индексируются от 0:

odd_sum_nth0([_,X|Y], Sum) :-
    odd_sum_aux(Y, X, Sum).

В противном случае списки индексируются с 1:

odd_sum_nth1([X|Y], Sum) :-
    odd_sum_aux(Y, X, Sum).

Дано:

odd_sum_aux([_, W|X], Y, Sum) :-
    !, Z is W + Y,
    odd_sum_aux(X, Z, Sum).
odd_sum_aux(_, Sum, Sum).

Предостережение emptor . ; -)

0 голосов
/ 28 апреля 2010

Это похоже на домашнюю работу, поэтому я просто подтолкну вас в правильном направлении. Проблема на самом деле две отдельные проблемы: фильтр и сумма. Решите их по отдельности и реализуйте нечетное, составляя решения.

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