Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Проверка списка как ариф. выражения на Турбо-Прологе
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
StGolem StGolem вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2005
По умолчанию Проверка списка как ариф. выражения на Турбо-Прологе - 29.11.2005, 12:50

Я тут совсем новичок, и пролог начал изучать только вчера. НО уже задали задачу(в качестве примера)
нужно проверить является ли список типа ["1","2","+","2","*","(","-","3","1",")"] павильным арифетическим выражением.
ПС на форуме искал, нашел МНОГО СЛОЖНЫХ примеров по разбору списка, этот же совсем простой.
И вообще почемубы администрации не сделать раздел для таких вот ПРОСТЫХ примеров, чтобы такие как я не рылись и не задавали один вопрос по 100 раз.
Ответить с цитированием
  (#2 (permalink)) Старый
TypucT TypucT вне форума
Member
 
Сообщений: 336
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2005
По умолчанию 29.11.2005, 19:46

Вот простая программа, которая решает вашу задачу:
Код:
test_this_list.
Пример работы:
Код:
?- test_this_list.
Yes
т.е. приведенный выше список действительно представляет правильное арифметическое выражение.

Отличайте пример и задачу. Стоит немножко порыться в "сложных" программах по разбору, и вы поймете, что они не сложные, а просто объемные из-за повторения однотипного кода. Реально вам нужно понять в каждой такой программе примерно 5 (пять) строк кода.
Ответить с цитированием
  (#3 (permalink)) Старый
StGolem StGolem вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2005
По умолчанию 29.11.2005, 20:30

Спасибо, юмор оценил
Но реально, ИМЕННО таких задач я на форуме не нашел. Была КУЧА по преобразованию, и всяким действиям со списками. Но нигде не нашел реализации простой проверки списка на соотвествие каким либо выражениям.
Ответить с цитированием
  (#4 (permalink)) Старый
TypucT TypucT вне форума
Member
 
Сообщений: 336
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2005
По умолчанию 30.11.2005, 00:44

Ага, уловил. То есть представление в виде дерева не нужно. Так это очень просто переделывается из тех программ, которые преобразуют выражение-список в дерево: просто всюду уберите лишние аргументы (те, что касаются дерева). Тогда программы станут немножко проще и ответ будет Yes или No.

(На самом деле эти программы делают и проверку и немного больше. Т.е. если есть какой-то предикат list_to_expr(List, Expr), то можно написать над ним предикат list_is_expr(List):- list_to_expr(List,_). )

Небольшое замечание:
так лучше не делать
Цитата:
["1","2","+","2","*","(","-","3","1",")"]
потому что строки - тоже списки. Лучше или так
Код:
"12+2*(-31)"
или же как-то так
Код:
['1','2','+','2','*','(','-','3','1',')']
Ответить с цитированием
  (#5 (permalink)) Старый
StGolem StGolem вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.11.2005
По умолчанию 01.12.2005, 18:26

Я так и думал что никто тут не даст вразумительного ответа.
Неужели это выше ваших сил? Или вы нехотите тратить свое время?
Я вот собственно примерно ЭТО хотел увидеть
Код:
domains
  lchar=char*
predicates
  s(lchar,lchar,integer,integer)
  a(lchar,lchar,integer,integer)
  b(lchar,lchar,integer,integer)
  d(lchar,lchar)
  c(lchar,lchar)
  dlina(lchar,integer,integer)
  znak(lchar,char,lchar)
clauses
  s(SI,S0,M,L):-
    a(SI,S0,M,L);
    znak(SI,'-',S1),
    a(S1,S0,M,L).
  a(SI,S0,M,L):-
    b(SI,S0,M,L);
    znak(SI,'(',S1),
    M<=L,
    M1=M+1,
    s(S1,S2,M1,L),
    znak(S2,')',S0);
    M<=L,
    M1=M+1,
    a(SI,S1,M1,L),
    c(S1,S2),
    M<=L,
    M1=M+1,
    a(S2,S0,M1,L).
  b(SI,S0,M,L):-
    d(SI,S0);
    M<=L,
    M1=M+1,
    b(SI,S1,M1,L),
    d(S1,S0).
  d(SI,S0):-
    znak(SI,'0',S0);
    znak(SI,'1',S0);
    znak(SI,'2',S0);
    znak(SI,'3',S0);
    znak(SI,'4',S0);
    znak(SI,'5',S0);
    znak(SI,'6',S0);
    znak(SI,'7',S0);
    znak(SI,'8',S0);
    znak(SI,'9',S0). 
  c(Si,S0):-
    znak(SI,'+',S0);
    znak(SI,'-',S0);
    znak(SI,'^',S0).
  znak([Z|S],Z,S).
  dlina(SI,N,K):-
    SI=[_|S1],
    N1=N+1,
    dlina(S1,N1,K);
    SI=[],
    K=N.
    

goal
 N=0, 
 S=['1','1','-','(','-','2',')','(','1','4','+','1',')'],
 dlina(S,N,K),
 write(K),nl,
 s(S,[],0,K),
 write("OK");
 write("NO").
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
TypucT TypucT вне форума
Member
 
Сообщений: 336
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.10.2005
По умолчанию 01.12.2005, 19:43

Цитата:
Я так и думал что никто тут не даст вразумительного ответа.
Что ж, тогда учи албанский
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия в турбо прологе. trinik Prolog 0 08.12.2011 21:20
Помогите написать програмку на турбо прологе:( c68c15 Prolog 0 07.04.2011 21:56
4 задачки на Турбо-Прологе Nuta_ Prolog 0 31.05.2010 23:27
Три задачки на Турбо-Прологе Quikk Prolog 5 31.05.2010 15:54
Крестики-Нолики именно на ТУРБО ПРОЛОГЕ mimas Prolog 1 11.12.2009 11:49
Помогите пожалуйста написать программу на Турбо прологе Angel&#39;s Prolog 1 20.11.2008 15:39
2 задачи по спискам на турбо прологе chaka Prolog 3 22.04.2008 13:56
Как задается терм в Турбо Прологе Acvilon Prolog 3 28.01.2008 00:22
Помогите с графикой в Турбо-Прологе Naj Prolog 3 02.04.2007 20:10
Ввод и обработка списков на Турбо-Прологе. Explosion Prolog 2 14.03.2007 15:38
Логическая задача на Турбо Прологе BAPBAP Prolog 1 30.05.2005 17:10
Простая БД на Турбо-Прологе. Panda78 Prolog 8 24.12.2004 01:22



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