Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для evilcockroach
14 / 14 / 5
Регистрация: 29.07.2013
Сообщений: 138

Повторение результатов в рекурсивной формуле

29.04.2014, 20:30. Показов 1254. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня имеется набор родительских отношений:
Кликните здесь для просмотра всего текста
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
parent(som,osetr).
parent(beluga,osetr).
parent(som,karp).
parent(beluga,karp).
parent(som,schuka).
parent(beluga,schuka).
parent(som,kaluga).
parent(beluga,kaluga).
  parent(osetr,karas).
  parent(schuka,karas).
  parent(osetr,plotva).
  parent(schuka,plotva).
  parent(karp,okun).
  parent(kaluga,okun).
  parent(karp,lesch).
  parent(kaluga,lesch).
  parent(karp,krasnoperka).
  parent(kaluga,krasnoperka).
  parent(karp,forel).
  parent(kaluga,forel).
    parent(karas,peskar).
    parent(plotva,peskar).
    parent(karas,beloglazka).
    parent(plotva,beloglazka).
    parent(okun,vyun).
    parent(krasnoperka,vyun).
    parent(okun,ersh).
    parent(krasnoperka,ersh).
    parent(okun,minoga).
    parent(krasnoperka,minoga).
    parent(okun,gustera).
    parent(krasnoperka,gustera).
    parent(lesh,rotan).
    parent(forel,stavrida).
    parent(lesh,rotan).
    parent(forel,stavrida).

Поставлена задача нахождения предшествующих и последующих всех элементов с помощью рекурсивной формулы.
Собственно саму формулу я написал:
Prolog
1
2
offspring(X,Z) :- parent(X,Z).
offspring(X,Z) :- parent(X,Y), offspring(Y,Z).
Но из-за подобной структуры проход к одному элементу выполняется по несколько раз. Например, запросив предшественников пескаря, получим такое:
Кликните здесь для просмотра всего текста
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
?- offspring(X,peskar).
X = karas ;
X = plotva ;
X = som ;
X = som ;
X = beluga ;
X = beluga ;
X = som ;
X = som ;
X = beluga ;
X = beluga ;
X = osetr ;
X = schuka ;
X = osetr ;
X = schuka ;
false.

В идеале мне нужно видеть такое:
Prolog
1
2
3
4
5
6
X = karas ;
X = plotva ;
X = som ;
X = beluga ;
X = osetr ;
X = schuka ;
То есть все по одному разу.
Пробовал использовать отсечение, но оно просто рубит на:
Prolog
1
2
3
X = karas ;
X = plotva ;
X = som.
А different на:
Prolog
1
2
3
X = karas ;
X = plotva ;
false.
Огромная просьба помочь. Решение с использованием списков не предлагать, поскольку как раз в следующем задании нужно справляться с ними, а в этом нужно обойтись без них.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2014, 20:30
Ответы с готовыми решениями:

Программа по рекурсивной формуле
нужно написать программу по формуле (n+1)^2/x(n+2), я сократил факториалы, должно быть по ней, вообще дана n!/x^2n(n+1)

Функция рекурсивной замены в формуле
существует ли какая-нибудь возможность сделать вычисляемое поле (в Microsoft Project), в котором, например, все точки заменены на запятые? ...

Расчёт результатов по формуле
Составить проект для расчета результатов по предложенной формуле : Y=Sin^2(A+2*X^2)-0.5*Tg(B*X/4) для ввода значения величины Х...

1
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
01.05.2014, 18:35
Лучший ответ Сообщение было отмечено evilcockroach как решение

Решение

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
ancestor(X,Z):- parent(X,Z).
ancestor(X,Z):- parent(Y,Z), ancestor(X,Y).
 
%от Z до предка X можно подняться несколькими путями.
%Z->Y1->...->X
%Z->Y2->...->X
%нам из всех Y будет подходить наименьший по алфавиту
 
%Проверка, что Y1 не наименьший по алфавиту
badY(X,Z,Y1):- parent(Y2,Z), ancestor(X,Y2), compare(<,Y2,Y1).
 
ancestor2(X,Z):- parent(X,Z).
ancestor2(X,Z):- parent(Y,Z), ancestor2(X,Y), not(badY(X,Z,Y)).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.05.2014, 18:35
Помогаю со студенческими работами здесь

Вывод результатов вычисления по формуле на печать
Здравствуйте форумчане. Попалась такая задачка: Вычислить значение переменной z по заданной расчетной формуле и набору исходных данных....

Вывод результатов вычисления по формуле на экран (графический режим)
нужна помощь.необходимо подсчитать формулу (k-1)*((\sum_{k-1}^{i=1}t(i))/\sum_{k-1}^{i=1}(1/(N-i+1)))=\sum_{k-1}^{i=1}(N-i+1)*t(i)Нужно...

Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной
Разработать программу согласно алгоритму с использованием рекурсивной функции и без использования рекурсивной функции. n sinl ...

Помогите пожайлуста с подбором согласно результатам формулы в формуле, после расчета выборка и добавление результатов в таблицу
Всем привет! Я новичек в Access и тем более в языках программирования. Но, я учусь... Нужна ваша помощь в создании небольшой базы в...

Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел
Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru