0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
1

работа со списками(дописать задание)

18.12.2011, 15:34. Показов 1419. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите дописать задачку. Понимаю, что такая задача наверняка уже рассматривалась и я находила решения, но только на турбо-прологе или SWI, а я программирую через приложение PIE-32...

Задание: Из списка символов S1, S2, ..., SN исключить все символы между круглыми скобками. Сами скобки тоже должны быть отброшены. Од-нако, если внутри круглых скобок есть другая пара круглых скобок, то она и содержащиеся в ней символы должны быть сохранены. И так далее рекурсивно. Например, последовательность "ab(c(d(ef(gh)z)fg)r)dd(ik(l))" преобразуется в "ab(d(gh)fg)dd(l)".

Вот то, что написала, но надо отредактировать, чтобы нормально работала...
Prolog
1
2
3
4
5
del([],_,L,L).
del(['('|B],_,L,R):- del(B,0,L,R).
del([')'|B],_,L,R):- del(B,1,L,R).
del([H|B],0,L,R) :- H\=='(',H\==')', del(B,0,R,R).
del([H|B],1,L,R) :- H\=='(',H\==')', del(B,1,R,[H|R]).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2011, 15:34
Ответы с готовыми решениями:

Работа со списками
Всем привет, бьюсь уже несколько часов над двумя заданиями... 1. необходимо удалить из списка все...

Работа со списками
1) Создать список перевертыш. 2) Создать из чётных. _________________________________...

Работа со списками.
Здравствуйте. Помогите пожалуйста. Из списка L1 получить список L2, очередной элемент которого...

Работа со списками
Привет всем. Есть такой вопрос - нужно написать функцию, которая для заданных произвольного...

12
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 17:39 2
Prolog
1
2
3
4
5
6
7
8
9
del([],_,[]).
del(['('|B],D,L):- D mod 2=:=0,!,D1 is D+1,del(B,D1,L).
del([')'|B],D,L):- D mod 2=:=0,!,D1 is D-1,del(B,D1,L).
del(['('|B],D,['('|L]):- !,D1 is D+1,del(B,D1,L).
del([')'|B],D,[')'|L]):- !,D1 is D-1,del(B,D1,L).
del([_|B],D,L) :- D mod 2=:=1,!,del(B,D,L).
del([H|B],D,[H|L]) :- del(B,D,L).
 
del(A,B):-del(A,0,B).
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 18:35  [ТС] 3
Спасибо огромное!!!! Только напишите пожалуйста, как сделать запрос. что-то не получается...
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 19:28 4
Ну как это может быть не понятно? Есть предикат с двумя параметрами.
?- del([a,'(',b,')',c],Ans),write(Ans).
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 19:53  [ТС] 5
Я программирую в Prolog Inference Engine и тот запрос, который вы написали не работает.

В том коде, который я написала, запрос был следующим : например, просто del([1,2], X) и потом выдавался результат.
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 20:18 6
Ну сделайте просто del, в чем проблема? Если не работает, то что выдает?
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 20:25  [ТС] 7
Ну, разумеется, я уже по разному писать пробовала и в итоге просто выдаёт No solutions.

Вот ещё, что пишет:
Сначала пишу запрос, например:
del([a,'(',b,f,')',d,d], X)
No solutions
После этого снова компилирую и после этого он ещё выдаёт:
del([(|B],D,L) :- D mod 2
Syntax error in parser
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 20:45 8
2й вариант точно не верен, скобки надо в кавычках писать.
Кстати, ошибку нашла, 3е правило надо изменить на
del([')'|B],D,L):- D mod 2=:=1,!,D1 is D-1,del(B,D1,L).
Наверно в Вашем диалекте нету mod или is или =:=, проверьте это.
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 21:04  [ТС] 9
всё равно ничего не работает, видимо действительно в диалекте нету mod или is или =:=. А что тогда делать, как модифицировать...
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 21:06 10
Я же сказала, проверьте чего именно нет. И замените на аналог, который есть.
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 21:14  [ТС] 11
а вот это =:= что значит?
0
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
18.12.2011, 21:19 12
Это равенство значений алгебраических выражений.
1
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 10
18.12.2011, 21:53  [ТС] 13
я исправила =:= на ==, теперь он просто работает хотя бы, но только выдаёт тот же список, который я ввожу, но не удаляет скобки.

Пример запросов:
del([1,2], X)
X= [1,2]
1 Solution
del([a,b,'(',v,d,')',d,s], X)
X= [a,b,(,v,d,),d,s]
1 Solution

А как можно mod заменить?
0
18.12.2011, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2011, 21:53
Помогаю со студенческими работами здесь

Работа со списками...
Здравствуйте, у меня тут назрел вопрос.... Кок можно решить такую задачу... Вот, собственно,...

Работа со списками
REALIST07, помогите с решение задачи Разработать программу, которая выполняет следующие операции:...

Работа со списками
Уважаемые, сижу на экзамене, нужна помощь с решением задачи.. Дано список с фамилиями авторов,...

Работа со списками.
Ребят, не в службу, а в дружбу. Нужна помощь. Задания совсем простые, только вот я ни бе, ни ме, ни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru