Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу swi prolog,пара задач.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
stan90 stan90 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2011
По умолчанию swi prolog,пара задач. - 28.10.2011, 03:54

подскажите пожалуйста:
1).как сформировать новую строку на основе исходной, взяв из нее каждый 3й символ.
2). Сгенерировать бинарное дерево произвольного вида с заданным количеством
элементов.
Подсказка: для генерации случайных значений использовать ф-ю random(X).
второе делаю вот так,но не работает,пишет no.
prolog Код:
tree_insert(X, nil,tr(X, nil, nil)).  
     
tree_insert(X,tr(X,L,R),tr(X,L,R)):-!.  
     
tree_insert(X,tr(K,L,R),tr(K,L1,R)):-
        X<K,!,  
        tree_insert(X,L,L1).  
         
tree_insert(X,tr(K,L,R),tr(K,L,R1)):-
        tree_insert(X,R,R1).  

tree_gen(0,nil):-!.
tree_gen (N,T):-
       random(100,X1),  
       N1 is N-1,
       tree_gen (N1,T1),  
       tree_insert(X1,T1,T).

заранее спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,272
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 28.10.2011, 04:59

А оно вообще что-то выдает?

Мой SWI выругался на random/2.
После замены на
prolog Код:
X1 is random(100),
заработало, выдает значение T, но потом стабильно уходит на откат - это для Вас неприемлемо? Тогда расставляйте отсечения в tree_insert.
Ответить с цитированием
  (#3 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,272
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 28.10.2011, 05:31

Первый, можно, например, как-то так:
prolog Код:
third_item([_,_,I|T1],[I|T2]):-!,
    third_item(T1,T2).
third_item(_,[]).

third_char(S1,S2):-
        string_to_list(S1,L1),
        third_item(L1,L2),
        string_to_list(S2,L2).
Можно и через другие предикаты сделать, смотря как Вас учили.
Ответить с цитированием
  (#4 (permalink)) Старый
stan90 stan90 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2011
По умолчанию 28.10.2011, 10:43

спасибо за первую задачу.
а вот во второй если сделать как Вы говорите X1 is random(100),то всё равно у меня пишет no.
А как по-другому можно еще сгенерировать бинарное дерево произвольного вида с заданным количеством
элементов,тоже используя random??
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,272
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 28.10.2011, 11:08

Вы, вероятно, не поняли. У меня тоже пишет, но после вывода дерева. Из-за отката. SWI пытается перебрать все комбинации, возникает откат. Чтобы не было отката, надо в первом предикате расставить отсечения.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
stan90 stan90 вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2011
По умолчанию 28.10.2011, 11:57

хм.а у меня вообще не выводится дерево.сразу no.

а куда вставить отсечение?там вроде всё стоит.
Ответить с цитированием
  (#7 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 28.10.2011, 15:39

бинарное дерево "случайного" вида:
Visual Prolog Код:
domains
     tree = tree(positive, tree, tree); nil.
class predicates
     get:(positive) -> tree.
clauses
     get(0) = nil:- !.
     get(A) = tree(random(100),get(C),get(D)):- B=A-1, C=random(B), D=B-C.
Ответить с цитированием
  (#8 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 28.10.2011, 22:32

Или более-менее "симметричную крону":
Visual Prolog Код:
clauses
     get(0) = nil:- !.
     get(A) = tree(random(100),get(ceil(B)),get(floor(B))):- B=(A-1)/2.
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пара задач по спискам! Anuta88 Prolog 3 12.04.2011 00:38
Помощь в решении базовых задач по prolog/lisp Mr_Nuke Задания за деньги 2 16.01.2011 22:31
пара логических задач AlCore Prolog 11 20.12.2010 20:34
Пара задач на тему списки BLooDCorpse Prolog 13 06.11.2010 19:21
Пара задач по турбо прологу Midous Prolog 5 11.01.2010 13:08
Прошу помощи в решении задач по Arity Prolog Mr_Anderson Prolog 1 01.12.2009 20:26
Примеры задач по Visual Prolog 5.2 cruliana Prolog 0 20.04.2009 19:31
Пара задач с олимпиады ummasha Pascal 102 20.03.2009 21:20
Витая пара Max Библиотека 23 28.01.2009 09:05
Пара вопросов... Sane]{ Visual Basic 0 28.10.2007 19:17
пара вопросов по prolog randomizer Prolog 6 20.09.2007 12:23
Витая пара Stas Сетевые подключения 1 08.05.2007 17:22



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