Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу списки и деревья
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_Александра_ imported_Александра_ вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.04.2006
По умолчанию списки и деревья - 04.04.2006, 01:52

Привет! ПРОЛОГ для меня язык новый, и потому - не совсем понятен. Не могли бы Вы мне помочь с реализацией некоторых задач на ПРОЛОГе:

1 задача. Подсчитать количество целых чисел, входящих в список [1, 2, 2, 3, 4, 5, 5, 6, 6] только один раз.

У меня есть программа, но там что-то не так!

Код:
domains
    list=integer*
predicates
    compare(integer,integer)
    del(list,list)
    length(list,integer)
    window
clauses
    compare(X,Y):-X=Y.

    del([],[]).
    del([A,B|T],M):-compare(A,B),del(T,M).
    del([A,B|T],[H|M]):-not(compare(A,B)),H=A,del([B|T],M).

    length([],0).
    length([_|T],L):-length(T,Len),L=Len+1.

    window:-makewindow(1,10,9,"Tree",0,0,25,80).
goal
    window, del([1, 2, 2, 3, 4, 5, 5, 6, 6], List), write("New list ", List), nl, length(List, L), write("Length of new list L=", L).
2 задача. Найти наибольший элемент дерева.

Программа почему-то не работает

Код:
 domains
    treetype = tree(integer,treetype,treetype); empty()
predicates
    traverse(treetype,integer)
    compare(integer,integer)
    window
clauses
    compare(X,Y) :- X>Y.

    traverse(empty,_).
    traverse(tree(Name,empty,empty),X) :-
            compare(Name,X),write(Name).

  traverse(tree(Name,Left,Right),X) :-
            compare(Name,X),
            traverse(Left,Name),
            traverse(Right,Name).

    traverse(tree(Name,Left,Right),X) :-
            not(compare(Name,X)),
            traverse(Left,X),
            traverse(Right,X).

    window:-makewindow(1,10,9,"Tree",0,0,25,80).

goal
    window, traverse(tree(3,
                       tree(2,tree(1,empty,empty),tree(2,empty,empty)),
                       tree(5,empty,tree(8,tree(9,empty,empty),empty))),0).
3 задача. Организовать добавление нового элемента в конец списка.


Заранее спасибо!
Ответить с цитированием
  (#2 (permalink)) Старый
Elenka79 Elenka79 вне форума
Member
 
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2006
По умолчанию Re: списки и деревья - 04.04.2006, 10:22

Цитата:
Originally posted by Александра_
[b]1 задача. Подсчитать количество целых чисел, входящих в список [1, 2, 2, 3, 4, 5, 5, 6, 6] только один раз.

У меня есть программа, но там что-то не так!
Насколько я понимаю, в вашей программе сравниваются только соседние числа, т.е список должен быть упорядоченным, иначе решение будет неверным, это раз, а во вторых, если оставлять ваше решение, то в нем, почему то, если два соседних элемента одинаковые, то удаляются оба, хотя по логике, нужно удалить один из них, а второй продолжать сравнивать.

Код:
del([],[]). 
    del([A|[]],[A|[]]). 
    del([A,B|T],M):-compare(A,B),del([B|T],M). 
    del([A,B|T],[A|M]):-not(compare(A,B)),del([B|T],M).
Цитата:
Найти наибольший элемент дерева.
Тут я Ваш метод решения вообще непонимаю, или ваш код написан для конкретного дерева, или у Вас есть условие, что все элементы в дереве строго положительные. По моему искать наибольший элемент сравнивая с нулем, не есть хорошее решение...
Цитата:
3 задача. Организовать добавление нового элемента в конец списка.
Код:
vstavka([],A,[A]):-!.
vstavka([H|T],A,[H|T1]):-vstavka1(T,A,T1).
Ответить с цитированием
  (#3 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 04.04.2006, 18:48

Цитата:
1 задача. Подсчитать количество целых чисел, входящих в список [1, 2, 2, 3, 4, 5, 5, 6, 6] только один раз.
Код:
domains 
il=integer* 
predicates 
уник(il,integer,integer,integer,symbol)
колич(il,integer)
clauses 
колич([A|L],N):- уник(L,A,0,N,впервые).
колич([],0).

уник([A|L],A,C,N,_):- !,уник(L,A,C,N,повторно). 
уник([A|L],_,C,N,повторно):- !,уник(L,A,C,N,впервые).
уник([A|L],_,C,N,впервые):- C1=C+1,уник(L,A,C1,N,впервые).
уник([],_,C,N,впервые):- N=C+1,!.
уник([],_,N,N,_).
goal 
L=[1,2,2,3,4,5,5,6,6],колич(L,N).
Цитата:
2 задача. Найти наибольший элемент дерева.
Код:
domains
tree=t(integer,tree,tree);n
predicates
наиб(tree,integer)
макс(integer,integer,integer)
clauses
наиб(t(X,n,n),X):- !.
наиб(t(X,L,n),Max):- !,наиб(L,MaxL),макс(X,MaxL,Max).
наиб(t(X,n,R),Max):- !,наиб(R,MaxR),макс(X,MaxR,Max).
наиб(t(X,L,R),Max):- 
    наиб(L,MaxL),
    наиб(R,MaxR),
    макс(X,MaxL,Y),
    макс(Y,MaxR,Max).
    
макс(X,Y,X):- X>=Y,!.
макс(_,Y,Y).
goal
наиб(t(3,t(2,t(1,n,n),t(2,n,n)),t(5,n,t(8,t(9,n,n),n))),N).
Ответить с цитированием
  (#4 (permalink)) Старый
imported_Александра_ imported_Александра_ вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.04.2006
По умолчанию 05.04.2006, 00:54

Alison и Elenka79! ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ!!!!!
Ответить с цитированием
  (#5 (permalink)) Старый
snezok snezok вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.10.2014
По умолчанию 22.10.2014, 21:59

Скажите пожалуйста, в 1 задаче для чего в предикате используются три integer и symbol?что они означают

predicates
уник(il,integer,integer,integer,symbol)
колич(il,integer)
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деревья Isav Prolog 10 23.10.2014 23:08
списки и бинарные деревья ab_walker Prolog 5 25.12.2011 17:05
Списки и пустые деревья RoGeR77 Prolog 14 17.06.2011 13:42
Списки и деревья. Fimka Prolog 4 13.04.2011 12:50
Деревья tsi Prolog 1 18.05.2009 17:57
Деревья Lena_T Prolog 3 01.05.2008 16:26
Все те же деревья John-VT Pascal 1 01.03.2007 22:25
Деревья ViL Prolog 9 10.05.2006 21:26
Деревья! Опять деревья! $layer Prolog 3 19.02.2006 21:44
AVL-деревья (сбалансированные деревья) kifa Prolog 1 14.05.2005 18:58
Что такое списки и деревья в Prolog .44magnum Prolog 1 03.11.2004 21:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов