Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Lw
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 66

Счетчик элементов дерева в Prolog

24.09.2015, 15:38. Показов 3453. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить число вхождений элемента 2 в дерево.
Вот наработка
Prolog
1
2
3
4
5
6
7
8
9
10
domains
    treetype=tree(integer,treetype,treetype);empty.
predicates
    nondeterm prtree(treetype).
clauses
    prtree(empty).
    prtree(tree(K,L,R)):-write(),prtree(L),prtree(R).
    prtree(tree(K,L,R)):-prtree(L),prtree(R).
goal
    prtree(tree(3,tree(2,tree(1,empty,empty),tree(2,empty,empty)),tree(5,empty,tree(8,tree(9,empty,empty),empty)))).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.09.2015, 15:38
Ответы с готовыми решениями:

Вывод бинарного дерева (перевести на SWI Prolog)
Напишите, пожалуйста, как код, приведенный ниже, будет выглядеть в диалекте SWI prolog. Это обычный вывод бинарного дерева. ...

Вычисления глубины бинарного дерева в Turbo Prolog
Написать программу для вычисления глубины бинарного дерева (глубина пустого дерева равна 0, глубина одноузлового дерева равна 1). даже не...

Создание упорядоченного дерева из списка. Strawberry Prolog
Всем привет! ребята, помогите пожалуйста решить задачу на Strawberry Prolog,не могу зачет сдать. условие:Элементы произвольного списка...

5
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
25.09.2015, 10:54
Лучший ответ Сообщение было отмечено Lw как решение

Решение

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
predicates
count2(treetype, integer)
count2item(integer, integer)
 
clauses
count2(empty, 0).
count2(tree(K,L,R), Count) :-
    count2item(K, CountK),
    count2(L, CountL),
    count2(R, CountR),
    Count = CountK + CountL + CountR.
 
count2item(2, 1) :- !.
count2item(_, 0).
2
Lw
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 66
02.10.2015, 11:33  [ТС]
Проблемка с выводом или я что то не так вывожу? Ругается на count2(Count)
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
domains
    treetype=tree(integer,treetype,treetype);empty.
predicates
    nondeterm prtree(treetype).
    count2(treetype, integer)
    count2item(integer, integer)
clauses
    prtree(empty).
    prtree(tree(K,L,R)):-write(),prtree(L),prtree(R).
    prtree(tree(K,L,R)):-prtree(L),prtree(R).
count2(empty, 0).
count2(tree(K,L,R), Count) :- count2item(K, CountK),
    count2(L, CountL),
    count2(R, CountR),
    Count = CountK + CountL + CountR.
 
count2item(2, 1) :- !.
count2item(_, 0).
    
goal
    prtree(tree(3,tree(2,tree(1,empty,empty),tree(2,empty,empty)),tree(5,empty,tree(8,tree(9,empty,empty),empty)))).
    count2(Count).
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
02.10.2015, 14:21
Prolog
1
2
3
4
5
goal
    MyTree = tree(3,tree(2,tree(1,empty,empty),tree(2,empty,empty)),tree(5,empty,tree(8,tree(9,empty,empty),empty))),
    prtree(MyTree),
    count2(MyTree, Count),
    write("Count = ", Count), nl.
1
Lw
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 66
02.10.2015, 15:33  [ТС]
Скажите пожалуйста зачем нужен предикат count2item? И что делают эти строки?
count2item(2, 1) :- !.
count2item(_, 0). Это ведь для проверки на наличие элемента в дереве?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
02.10.2015, 17:41
Лучший ответ Сообщение было отмечено Lw как решение

Решение

Цитата Сообщение от Lw Посмотреть сообщение
зачем нужен предикат count2item?
Подсчет значения в узле вынесен в отдельный предикат. Если когда-нибудь понадобится посчитать по дереву что-то другое (аддитивное), достаточно будет переписать этот предикат. Да и логика работы с деревом получается нагляднее, если её не смешивать с самой логикой подсчёта.

Цитата Сообщение от Lw Посмотреть сообщение
И что делают эти строки?
Вот эти строки как раз и считают количество двоек в данной вершине. Их там или 1, или 0. Для 2 получаем 1, для остальных значений 0.

Если Вам зачем-то нужно засунуть всё это в один предикат, то это возможно. Но сделайте это самостоятельно.
Подсказка: вместо двух правил count2, в одном из которых есть дополнительная развилка внутри count2item, получится три правила, раздельно обрабатывающих пустое дерево, дерево с двойкой в вершине и дерево без двойки в вершине.

Но по-моему, с дополнительным предикатом лучше - проще и понятнее
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2015, 17:41
Помогаю со студенческими работами здесь

Вычисление глубины бинарного дерева на Arity Prolog
Пожалуйста помогите дописать буквально пару строчек в коде!!! вот код: max(R1,R2,Max):- R1>=R2, Max=R1. max(R1,R2,Max):-...

Количество узлов дерева на заданной глубине. Arity Prolog
Условие:?- pred(s(f(b(m,k),a),t(a,w)),1,X). X = 1 ?- pred(s(f(b(m,k),a),t(a,w)),3,X). X = 4 Допустим, я могу проверить...

Поиск минимума среди листьев дерева [Решено] [Turbo Prolog]
domains treetype=tree(integer,treetype,treetype);empty() predicates print_tree(treetype) add_node(treetype,integer,treetype) ...

Некоторые элементы дерева заменить разностью максим и минимальных элементов этого же дерева
Элементы дерева значение которых больше задаваемой величины заменить разностью максим и минимальных элементов этого же дерева

Turbo Prolog: подсчитать сумму всех вершин данного дерева, значения которых принадлежат заданному диапазону
Помогите,пожалуйста,кто в этом разбирается. Нужно создать предикат,подсчитывающий сумму всех вершин данного дерева,значения которых...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru