Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 23.04.2012
Сообщений: 42

Разбиение списка на три по вводимым значениям

22.04.2013, 12:37. Показов 932. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Суть задачи в следующем: есть исходный список и 2 введённых пользователем значения. Надо разбить исходный список на три следующим способом: в первый список поместить все элементы до первого введённого, во второй - от первого введённого, до второго (не включительно), в третий - оставшиеся.
Пример:
Исходный [1,2,3,4,5].
Разбиваем по 3, 5.
Результат: [1,2], [3,4], [5].
Наработки есть, но нифига не работает уже на начальном этапе (не добавляет элементы с список).
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
domains
 s=string
 sl=s*
predicates
 nondeterm разбить(sl,s,s,sl,sl,sl)
 nondeterm добавить(sl,s,sl)
clauses
 добавить([],ДОБАВИТЬ,[ДОБАВИТЬ]).
 
 добавить([ГОЛОВА0|ХВОСТ0],ДОБАВИТЬ,[ГОЛОВА0|ХВОСТ1]):-
   добавить(ХВОСТ0,ДОБАВИТЬ,ХВОСТ1).
 
 разбить([],ПЕРВЫЙ,ВТОРОЙ,RES1,RES2,RES3).
  
 разбить([ПЕРВЫЙ|ХВОСТ],ПЕРВЫЙ,ВТОРОЙ,РЕЗ1,РЕЗ2,РЕЗ3):-
   добавить(РЕЗ2,ПЕРВЫЙ,РЕЗ2_1),
   разбить(ХВОСТ,ПЕРВЫЙ,ВТОРОЙ,РЕЗ1,РЕЗ2_1,РЕЗ3).
     
 разбить([ГОЛОВА|ХВОСТ],ПЕРВЫЙ,ВТОРОЙ,РЕЗ1,РЕЗ2,РЕЗ3):-
   добавить(РЕЗ1,ГОЛОВА,РЕЗ1_1),
   разбить(ХВОСТ,ПЕРВЫЙ,ВТОРОЙ,РЕЗ1_1,РЕЗ2,РЕЗ3).
 
goal
 разбить(["1", "2", "3", "a", "a", "b"],"2","a",RES1,RES2,RES3).
Подобных тем (не считая разбиения на 2 списка) не встречал. Моих скудных знаний не хватает для решения этой проблемы. Кто может помочь или подсказать что не то, только рад буду.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2013, 12:37
Ответы с готовыми решениями:

Задача на разбиение списка чисел на три списка
Определите предикат split(+Numbers,?Pozitives,?Negatives,?Zeroes) который разбивает список чисел на три списка: положительные,...

Сформировать список из чисел, противоположных вводимым значениям
Сформировать список из чисел, противоположных вводимым значениям.

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

2
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
22.04.2013, 22:43
Думаю, что имелось ввиду числовой список на промежутки разбить.
Prolog
1
2
3
4
разбить([],_,_,[],[],[]).
разбить([H|Tail],A,B,[H|TailA],ListAB,ListB):-H<A,!,разбить(Tail,A,B,TailA,ListAB,ListB).
разбить([H|Tail],A,B,ListA,[H|TailAB],ListB):-H<B,!,разбить(Tail,A,B,ListA,TailAB,ListB).
разбить([H|Tail],A,B,List,ListAB,[H|TailB]):-разбить(Tail,A,B,ListA,ListAB,TailB).
0
1 / 1 / 0
Регистрация: 23.04.2012
Сообщений: 42
23.04.2013, 14:13  [ТС]
В том-то и суть, что список любой может быть, не только числовой.
Твой алгоритм в принципе подходит и для списка строк, но выдаёт вот такой вот "артефакт":
( для разбить(["1", "2", "3", "a", "a", "b"],"3","b",RES1,RES2,RES3).
RES1=["1","2"|_], RES2=["3","a","a"], RES3=["b"]. )
Не знаешь, почему косяк в RES1 ?

Добавлено через 3 минуты
И ещё, если список не отсортирован по возрастанию, то тоже начинает косячить...

Добавлено через 13 часов 45 минут
Я решил проблему по другому
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
domains
 s=string
 sl=s*
 
predicates
 nondeterm divide(sl,s,sl,sl)
 nondeterm divide1(sl,s,s,sl,sl,sl,sl)
clauses
  divide([A|B], A, [], [A|B]):-!.
  divide([A|B], W, [A|C], D):-!, divide(B, W, C, D).
  
  divide1(СПИСОК0,ПЕРВЫЙ,ВТОРОЙ,СПИСОК1,СПИСОК2,СПИСОК3,СПИСОК4):-
   divide(СПИСОК0,ПЕРВЫЙ,СПИСОК1,СПИСОК2),
   divide(СПИСОК2,ВТОРОЙ,СПИСОК3,СПИСОК4).
 
goal
divide1 (["3", "2", "1", "a", "a", "b"],"1","a",RES1,RES2,RES3,RES4).
Но, теперь необходимый нам ответ содержится в переменных RES1, RES3 и RES4. RES2 получается как буфер. Осталась только проблема, как сделать так, чтоб он не выводился.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2013, 14:13
Помогаю со студенческими работами здесь

Тема: Списки. (разбиение списка на два списка одинаковой длины)
Сдрасти. Прошу помочь решить следующую задачу. Буду очень благодарен. Написать программу построения линейной списковой структуры,...

Разбиение списка на два списка одинаковой длины
Помогите пожалуйста!!! НЕ оставьте в беде!!!!! Срочно нужна помощь!!!!!!!!!!!!!!!!! Написать программу построения линейной списковой...

Даны три списка потребителей и три массива объёмов электроэнергии
Даны три списка потребителей и три массива объёмов электроэнергии. Напечатать из каждого списка потребителей с минимальным(min) и...

Заданы три списка, сформировать из них три множества и определить их прямое произведение
помогите написать код программы.

Разбиение одного большого массива на три маленьких
Есть массив A. Нужно переписать его в 3 массива A1, A2, A3. A1 - с 1 по 5 столбец. А2 - с 6 по 10 столбец. А3 - с 11 по 15...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru