Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Не выдаёт ответ
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anoen Anoen вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.03.2007
По умолчанию 28.03.2007, 16:21

Нужно найти самое короткое слово.Так вместо ответа пустая строка.
Подскажите кто знает
Код:
predicates
short (string, integer, string, string)
goal 
write ("vvedite text: "), nl,
readln (Str),
short (Str, 0, "", W),
write ("Samoe korotkoe slovo: ", W), !.
clauses
short (Str, L0, _, W) :-
fronttoken (Str, W1, Str1),
str_len (W1, L1),
L1<L0, !,
short (Str1, L1, W1, W).
short (Str,L0,W0,W):-
fronttoken (Str, _, Str1), !,
short (Str1, L0, W0, W).
short (_, _, W, W).
Ответить с цитированием
  (#2 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,770
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 28.03.2007, 18:31

Дело в том, что у Вас изначально второй аргумент равен 0, а третий - "". А их значения, в соответствии с первым правилом, могут быть заменены только если длина очередного слова будет меньше нуля, что невозможно. Поэтому первое правило никогда не выполняется. А второе правило значения этих аргументов не изменяет. Так что третий аргумент всегда равен пустой строке, это значение и передается в ответ.
Тут проще всего поместить туда вместо 0 и "" - длину первого слова и само это слово, соответственно. Тогда все будет нормально.
Код:
predicates
short(string, string)
short(string, integer, string, string)
goal
write ("vvedite text: "), nl,
readln (Str),
short (Str, W),
write ("Samoe korotkoe slovo: ", W), nl.
clauses
short(Str, W):- 
    fronttoken(Str, W0, Str1), !,
    str_len(W0, L0),
    short (Str1, L0, W0, W).
short(_, "").

short (Str, L0, _, W) :-
    fronttoken (Str, W1, Str1),
    str_len (W1, L1),
    L1<L0, !,
    short (Str1, L1, W1, W).
short (Str,L0,W0,W):-
    fronttoken (Str, _, Str1), !,
    short (Str1, L0, W0, W).
short (_, _, W, W).
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При запуске выдаёт ошибку Погосский Алекс Любые вопросы от новичков 32 08.04.2012 19:34
Комп выдаёт синие экраны... RomaWod Любые вопросы от новичков 5 15.03.2012 08:16
Компьютер включается, но монитор не выдаёт изображение lence Любые вопросы от новичков 4 23.12.2011 18:12
Выдаёт ошибку turegopt program not found-skipping AUTOCHECK Prokser Любые вопросы от новичков 1 10.06.2011 18:25
amd phenom II X4 955 не выдаёт своей частоты doctorfaust999 Процессоры 13 06.06.2011 18:05
монитор viewsonik VA703m выдаёт ошибку и при включении лина Любые вопросы от новичков 6 25.11.2010 22:22
При загрузке выдаёт 2 винды! Что делать? tim666 Операционная система Windows 4 11.03.2010 18:12
NOD выдаёт такое сообщение... Валерий Софт и программы 4 22.03.2008 09:36
Выдаёт ошибку, прошу помочь YuriNer PHP 5 21.04.2006 14:20
Журнал операций выдаёт нули что делать АЛЬБИНА Delphi 5 16.03.2006 21:13
При компиляции VC++ выдаёт ошибку : Код: _asm{ MOV AX,0x4f05 Merl1n Visual C++ 12 27.09.2004 14:33



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