7 / 7 / 2
Регистрация: 21.10.2012
Сообщений: 101
1

Преобразовать терм из БД

15.11.2012, 20:38. Показов 934. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие: Если нумеровать потомков каждого узла дерева слева направо, то можно для каждого узла составить его описание. В разделе БД хранится терм представленный в виде совокупности описаний узлов. Преобразовать описание в структуру Пролога.

Аргументы: имя раздела БД (имя структуры) и структура.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
?- recorded(tst,X,_).
X = 1:f -> ;
X = 1:1:a -> ;
X = 1:1:1:m -> ;
X = 1:1:2:k -> ;
X = 1:1:2:1:v -> ;
X = 1:2:r -> ;
X = 2:n -> ;
X = 2:1:i -> ;
X = 2:1:1:d -> ;
X = 2:1:2:e -> ;
X = 2:1:3:z -> ;
X = 3:o -> ;
no
?- pred(tst,X).
X = tst(f(a(m,k(v)),r),n(i(d,e,z)),o)
yes
?-
БД, насколько я понимаю, будет выглядеть так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
recorded(tst,1:f).
recorded(tst,1:1:a).
recorded(tst,1:1:1:m).
recorded(tst,1:1:2:k).
recorded(tst,1:1:2:1:v).
recorded(tst,1:2:r).
recorded(tst,2:n).
recorded(tst,2:1:i).
recorded(tst,2:1:1:d).
recorded(tst,2:1:2:e).
recorded(tst,2:1:3:z).
recorded(tst,3:o).
Но вот как быть дальше? Не представляю даже саму логику программы.

Не по теме:

Нашел похожую задачу на форуме( В разделе БД хранится терм в графическом представлении. Преобразовать его в структуру Пролога. ), но увы без решения.



Добавлено через 5 минут
Использую Арити пролог.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2012, 20:38
Ответы с готовыми решениями:

Полином и терм
Я не могу исправить ошибки, помогите пожалуйста)) #include "pch.h" #include "poli.h" using...

ПРОБЛЕМА 1С+ШК+СЕРВ.ТЕРМ
Если повторяюсь не ругайте, вообщем суть проблемы:"поднял сервер терминалов(server 2003), установил...

Что такое терм?
Что такое терм? Для чего он нужен? Реализовать терм в котором элементы последовательности зависят...

Терм для типа
Здравствуйте. Кто-нибудь знает какой лямбда терм подойдет такому типу: (((a->b)->b)->b) ->...

4
7 / 7 / 2
Регистрация: 21.10.2012
Сообщений: 101
19.11.2012, 15:24  [ТС] 2
Накосячил с базой...
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
:-eraseall(tst).
:-recordz(tst,1:f,R).
:-recordz(tst,1:1:a,R).
:-recordz(tst,1:1:1:m,R).
:-recordz(tst,1:1:2:k,R).
:-recordz(tst,1:1:2:1:v,R).
:-recordz(tst,1:2:r,R).
:-recordz(tst,2:n,R).
:-recordz(tst,2:1:i,R).
:-recordz(tst,2:1:1:d,R).
:-recordz(tst,2:1:2:e,R).
:-recordz(tst,2:1:3:z,R).
:-recordz(tst,3:o,R).
но в остальном вопрос открыт
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
19.11.2012, 23:24 3
В работе с бд разбираться не хочется, а построение дерева такое
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
%:- op(100,yfx,:). %расскомить меня, если не работает
 
f(1:f).
f(1:1:a).
f(1:1:1:m).
f(1:1:2:k).
f(1:1:2:1:v).
f(1:2:r).
f(2:n).
f(2:1:i).
f(2:1:1:d).
f(2:1:2:e).
f(2:1:3:z).
f(3:o).
 
pred(Name,Ans):-build_list(1,L), Ans=..[Name|L].
 
build(Way,Tree):-f(Way:Functor),atomic(Functor),!,
    (   not(f(Way:1:_)),!, Tree=Functor ;
    build_list(Way:1,List), Tree=..[Functor|List]).
 
build_list(Way:I,[H|Tail]):-build(Way:I,H),!,
    I1 is I + 1, build_list(Way:I1, Tail).
build_list(I,[H|Tail]):-build(I,H),!,
    I1 is I + 1, build_list(I1, Tail).
build_list(_,[]).
?- pred(tst,Ans).
Ans = tst(f(a(m, k(v)), r), n(i(d, e, z)), o).
1
7 / 7 / 2
Регистрация: 21.10.2012
Сообщений: 101
20.11.2012, 13:37  [ТС] 4
а можете немного рассказать как работает предикат op()?
нашел такое определение:
op(+Prec,+Assoc,+Op)
Задает старшинство, ассоциативность и имя оператора.
но понятнее не стало.
кстати, корректно работает только если его раскомментировать.
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
20.11.2012, 21:17 5
http://www.mari-el.ru/mmlab/ho... index.html
Тут это надо было сделать, потому что оператор : являлся префиксным, и
?- A=1:2, f(A:r).
завершилось бы неудачей, потому что 1:2:r = [:, 1, [:, 2, r]], а надо [:, [:, 1, 2], r). Поэтому и переопределила его в постфиксный.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2012, 21:17
Помогаю со студенческими работами здесь

Преобразование списка в терм
у меня сразу несколько вопросов допустим есть список L= моя задача преобразовать его в терм...

Преобразование списка с неопределенной переменной в терм
всем привет! есть задание "Определите предикат конкрет(Терм) так, чтобы он принимал значение...

Исчисление предикатов, свободный терм для переменной
DF: Терм t называется свободным для переменной {x}_{i} в формуле A, если никакое свободное...

Предикат, определяющий, является ли данный терм булевой формулой
49. Определим операторы: :- op( 100, fy, ~). :- op( 110, xfy, &). :- op( 120, xfy, v). Булева...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru