IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Программирование на Прологе 5.2, Работа со списками.
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Всем привет. Возникла проблема по написанию проги..не могу реализовать список точнее сделать операцию REMOVESUBLIST – Удаление из списка всех подсписков.
помогите кто знает как это сделать вот выложил прогу может оттуда что можно сдуть(

Есть похожая программка которая удаляет из списка первого вхождения заданного элемента.


Код
include "labanumberthree.inc"
domains
spisok=INTEGER*
predicates
del(spisok,integer,spisok).
clauses
del([],X,[]).
del([H|X],H,X). %- будет работать в случае, если мы хотим удалить первый элемент из списка.
del([H|T],X,[H|T1]):-X<>H, del(T,X,T1). /* -будет работать если мы хотим удалить не первый элемент из списка ,в данном случае эта строка работает так: 1)сравнивается 1й элемент хвостовой части 1го списка с заданным значением пользователя ,если они не равны, то этот элемент заносится во второй пустой список 2)рекурсивно проверяется 2й элемент хвостовой части с дальнейшими последующими действиями и далее все остальные 3) При нахождении одинаковых элементов он не заносится в новый список.*/
goal
del([1,2,3,4,5,6,2,1,2],2,X).%-будет выдан ответ: X=[1,3,4,5,6,2,1,2]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


мдаа..никто не знает
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Чуть что - сразу "никто не знает"... Компилятор Пролога - он же не у каждого под рукой, правда?

У меня, например, его нет. Но код могу попробовать набросать. Вот, тестируй:

domains
spisok=integer*
predicates
del(spisok,spisok,spisok,spisok)
test(spisok,spisok,spisok)
do_it(spisok,spisok,spisok)
clauses
del([],_,_,[]):-!.
del([X|L1],L0,[X|L2],L):-test(L1,L2,L3),!,del(L3,L0,L0,L).
del([X1|L1],L0,L2,[X1|L]):-del(L1,L0,L2,L).

test(L,[],L):-!.
test([X|L1],[X|L2],L):-test(L1,L2,L).

do_it(L,L2,X):-del(L,L2,L2,X).


Вызывать так:
do_it([2,3,4,7,2,3,2,1,2,3,4],[2,3],X) - должно из списка, который в первом параметре, удалить все те подсписки, которые передаются вторым параметром...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Спасибо, Volvo! Вот только не понимаю как можно удалять подсписок у списка?



Добавлено через 8 мин.
Я думал что есть главный список и есть в нем голова и хвост, в качестве элемента так же могут быть подсписки.

Думал алгоритм решение данной задачи такой...делаем проверку на наличие подсписков если они есть то удлаяем их и получается у нас главный список пустой. Верно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


do_it([2,3,4,7,2,3,2,1,2,3,4],[2,3],X)---это считаеться целью?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


млин...неужели ни кто не знает?((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 2:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name