Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Работа со списками
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
NRGize NRGize вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2007
По умолчанию 24.05.2007, 02:39

Доброго времени суток.

Написал простенькую программку для обработки списков:


************************************************** ******************************
********************


Код:
domains
    list = ch*
    ch = char    
    word_length = integer
    par = char
predicates
           input_list ( list )
           get_word ( list, list, list, word_length )
           find ( list, list, word_length )
           max_word ( list, list, list, word_length, word_length)
           menu
           enter ( par )
clauses
    menu:-
        nl,
        write ("***************************\n"),
        write (" 1 - Ввод списка слов\n"),
        write (" 0 - Выход из программы\n"),
        write ("***************************\n"),
        write ("Сделайте выбор ->"), readchar (Par) ,
        enter (Par),
        menu.
        
    enter ( '1' ):-
        input_list ( List ),
               nl, nl, write ( "***********************************"),
               nl, write ( "Введён список:\t\t\t", List ), nl,
               find ( List, [] , 0 ),
               nl, write ( "***********************************").
    enter ( '0' ):-
        exit.
        
/********** Начало работы программы ***********/
/************ Ввод списка символов ************/    
           input_list ( [ H | T ] ) :-
               nl,
        write ( "> " ),
        readchar ( H ),
        H <> '\r',!,
        write ( H ),
        input_list ( T ).
           input_list ( [ ] ).

/***********************************************************
    Получить одно слово до пробела или конца списка
***********************************************************/
    % Получает слово из списка в первом параметре
    get_word ( [ ], [ ] , [ ] , 0 ).
    
    get_word ( [ ' ' ], [ ] ,  [ ] , 0 ) :-  !.
    
    get_word ( [ ' ',' ' | T ], [ ] ,  Res , 0 ) :- 
        get_word ( [ ' ' | T ], [ ] ,  Res, 0 ),!.
        
           get_word ( [ ' ',Char | T ], [ ] ,  [ Char | T ], 0 ) :- !.
           
           get_word ( [ Head | Tail ], [ Head | Word ], Res, Length ) :- 
               get_word ( Tail, Word, Res, NewLength ),
               Length = NewLength + 1.
           
                                    
/***********************************************************
    Проход по всему списку с поиском слов
***********************************************************/
    find ( [], MaxWord, MaxLength ):-!,                            
        write ( "Самое длинное слово:\t\t", MaxWord ), 
               nl, write ( "Его длина:\t\t\t", MaxLength ).
    find (  List , MaxWord, MaxLength ) :-
        get_word ( List, Word, Tail, Length ),
        max_word ( Tail , MaxWord, Word, MaxLength, Length ).

    % Определят с какими параметрами должна быть запущена процедура find
    max_word ( List, _ , NewMaxWord, MaxLength, NewMaxLength ) :-
        NewMaxLength > MaxLength,!,
        find (  List , NewMaxWord , NewMaxLength ).
    max_word ( List, MaxWord, _ , MaxLength, _  ) :-
               find (  List , MaxWord , MaxLength ).
goal
       menu.

************************************************** ******************************
********************

а теперь вопрос к знающим.
Вывод информации на экран о самом длинном слове и длинне у меня реализован в самом проходе по списку. Хотелось бы чтобы информация выводилась там же, где выводится информация о введенном списке... т.е. при выборе 1 пункта меню->
enter ( '1' ):-
input_list ( List ),
nl, nl, write ( "***********************************"),
nl, write ( "Введён список:\t\t\t", List ), nl,
find ( List, [] , 0 ),
ХОТЕЛОСЬ ЧТОБЫ ЗДЕСЬ ВЫВОДИЛОСЬ
nl, write ( "***********************************").
enter ( '0' ):-
exit.


Кто знает как это реализовать, так как я уже долго мучаюсь и не получается.

p/s/ жду прямого ответа а не намеков))) заранее спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,988
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 24.05.2007, 22:35

Код:
domains
    list = ch*
    ch = char    
    word_length = integer
    par = char
predicates
    input_list ( list )
    get_word ( list, list, list, word_length )
    find (list,list,word_length,list, word_length )
    max_word(list,word_length,list,word_length,list,word_length)
    menu
    enter ( par )
clauses
    menu:-
        nl,
        write ("***************************n"),
        write (" 1 - Ввод списка словn"),
        write (" 0 - Выход из программыn"),
        write ("***************************n"),
        write ("Сделайте выбор ->"), readchar (Par) ,
        enter (Par),
        menu.
        
    enter ( '1' ):-
        input_list ( List ),
               nl, nl, write ( "***********************************"),
               nl, write ( "Введён список:ttt", List ), nl,
               find ( List, [] , 0 ,MaxWord,MaxLength),
               write ( "Самое длинное слово:tt", MaxWord ), 
               nl, write ( "Его длина:ttt", MaxLength ),
               nl, write ( "***********************************").
    enter ( '0' ):-
        exit.
        
/********** Начало работы программы ***********/
/************ Ввод списка символов ************/    
           input_list ( [ H | T ] ) :-
               nl,
        write ( "> " ),
        readchar ( H ),
        H <> 'r',!,
        write ( H ),
        input_list ( T ).
           input_list ( [ ] ).

/***********************************************************
    Получить одно слово до пробела или конца списка
***********************************************************/
    % Получает слово из списка в первом параметре
    get_word ( [ ], [ ] , [ ] , 0 ).
    
    get_word ( [ ' ' ], [ ] ,  [ ] , 0 ) :-  !.
    
    get_word ( [ ' ',' ' | T ], [ ] ,  Res , 0 ) :- 
        get_word ( [ ' ' | T ], [ ] ,  Res, 0 ),!.
        
           get_word ( [ ' ',Char | T ], [ ] ,  [ Char | T ], 0 ) :- !.
           
           get_word ( [ Head | Tail ], [ Head | Word ], Res, Length ) :- 
               get_word ( Tail, Word, Res, NewLength ),
               Length = NewLength + 1.
           
                                    
/***********************************************************
    Проход по всему списку с поиском слов
***********************************************************/
    find ( [] , MaxWord, MaxLength, MaxWord, MaxLength ):-!.                           
    find ( List , MaxWord, MaxLength, MaxWord0, MaxLength0 ) :-
        get_word ( List, Word, Tail, Length ),
        max_word ( MaxWord, MaxLength, Word, Length, NewWord, NewLength ),!,
        find (  Tail , NewWord, NewLength, MaxWord0, MaxLength0 ).

    % Определят с какими параметрами должна быть запущена процедура find
    max_word ( _, MaxLength, Word, Length, Word, Length ) :-
        Length > MaxLength,!.
    max_word ( MaxWord, MaxLength, _, _, MaxWord, MaxLength ).
goal
       menu.
Ответить с цитированием
  (#3 (permalink)) Старый
NRGize NRGize вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2007
По умолчанию 25.05.2007, 00:43

Спасибо за помощь!
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со списками 3ai4i6ka Prolog 0 20.10.2011 22:12
Работа со списками ELEKTRI4KA Prolog 3 07.06.2011 01:22
Работа со списками. BLACKRIDER Prolog 3 10.05.2010 12:34
работа со списками Novichok92 Prolog 1 10.11.2009 19:15
работа со списками FEAR Prolog 8 09.11.2009 01:08
работа со списками ShokoLad Prolog 18 24.07.2009 02:53
работа со списками из_семи Prolog 12 04.05.2009 01:22
Работа со списками wert30 Prolog 2 24.01.2009 16:04
Работа со списками Михаил_1987 Prolog 3 19.01.2009 09:18
Работа со списками. status Prolog 17 01.11.2008 13:06
Работа со списками izen Prolog 1 04.05.2008 21:55
Работа с списками ViL Prolog 1 15.04.2006 08:51



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