Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Найти сумму двух предыдущих четных (нечетных)


Автор: ahito1 9.3.2013, 22:38
Никак не могу построить рекурсивную функцию для вычисления n-го члена последовательности, в которой каждый четный член равен сумме двух предыдущих четных, а нечетный равен сумме двух предыдущих нечетных

Автор: Stolzen 9.3.2013, 23:54
Под четными и нечетными подразумеваются порядковые номера элементов в списке? 
Если так, то можно четные и нечетные элементы хранить в разных списках, и тогда функция будет следующей

Код

sum(left, right):
    a = head left
    b = head tail left
    sum(right, [(a + b) | left])


| - это присоединение элемента к списку
head - извлечение первого элемента из списка
tail - список без первого элемента

Автор: ahito1 9.3.2013, 23:56
помогите перевести код с джавы на пролог

public class MyClass{

 public static void main(String [] args){
    int nom=10;
    System.out.println(Rec(nom));
 }

 public static int Rec(int n){
    int result=0;
    if (n>4){
        result = Rec(n-2) + Rec(n-4);
    }
    else{
        return n;
    }
    return result;
 }

}

Автор: Stolzen 10.3.2013, 00:06
Я не очень хорошо пролог помню, но я посмотрел синтаксис в вики, и у меня получилось следующее

Код

rec(n) :- n > 4, rec(n - 2) + rec(n - 4).
rec(n) :- n <= 4, n.

main :- 
    rec(10).

Автор: ahito1 10.3.2013, 00:19
Цитата(Stolzen @ 10.3.2013,  00:06)
Я не очень хорошо пролог помню, но я посмотрел синтаксис в вики, и у меня получилось следующее

Код

rec(n) :- n > 4, rec(n - 2) + rec(n - 4).
rec(n) :- n <= 4, n.

main :- 
    rec(10).

никак не могу заставить Visual Prolog запустить его:(

Автор: ahito1 10.3.2013, 00:41
для чисел фибоначи
f(1,1) :– !.    % Первое число есть1 
f(2,1) :– !.    % Второе число есть2 
f(I,R) :– I>2, I1=I–1, I2=I–2, f(I1,M), f(I2,N), R=N+M. % общий случай

а для моего случая
никак не могу написать, не работает:
class predicates
   f : (integer I, integer R) nondeterm anyflow.
clauses
   f(1,R) :- R=1.
   f(2,R) :- R=2.
   f(3,R) :- R=3.
   f(4,R) :- R=4.
   f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.

Автор: ahito1 10.3.2013, 01:09
ПОБЕДА!!! заработало! если кому нужен код, кину

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)