Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
154 / 154 / 81
Регистрация: 16.06.2012
Сообщений: 314

Работа со списком

11.03.2016, 14:09. Показов 1834. Ответов 3
Метки loop (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, сообщество!
Имеется следующая задача. Дан некоторый список L. Необходимо перед каждым вхождением числа Y добавить число X.

На данный момент написал следующее:
Остановка:
Prolog
1
insert([] , _ , _ , []).
Дальше смотрю, если первый элемент списка совпадает с Y, то сначала добавляю Y к списку, а потом вначале добавляю X, чтобы получился от такой список - [X Y ХВОСТ]:
Prolog
1
2
3
4
insert([H|T] , X , H , RES):-
    add(H , RES , RES2),
    insert(T , X , H , [X|RES2]).
add(X , [] , [X|[]]).
Ну и если первый элемент не равен Y, то просто добавляю первый элемент списка к ответу:
Prolog
1
2
insert([H|T] , X , Y , RES):-
    insert(T , X , Y , [H|RES]).
НО! Программа не работает, говорит ошибка "Loop in the flow analysis". Соответственно вопрос, почему? Логика то вроде верна построения.
Ошибка вылазит в последней части, когда голова не равна Y. Почитал информацию, говорят из-за зацикливания, однако я ведь всегда избавляюсь от головы, значит, в некоторый момент, список все равно станет пустым. Или я что-то путаю
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2016, 14:09
Ответы с готовыми решениями:

Работа со списком
Имеется класс Tovar, в котором есть поля: название, страна, объем и цена Class Tovar { public string _name; ...

Работа со списком
Здравствуйте! Задачка такая. Имеется примерно такой список: Максим Информация1 Информация2 Информация3 Информация4 ...

Работа со списком
Ребят подскажите пожалуйста, как проще написать код (а то я полезла в дебри, но все же мне кажется, что должно быть проще) Есть два...

3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,722
Записей в блоге: 14
11.03.2016, 16:26
Лучший ответ Сообщение было отмечено igor_kz как решение

Решение

Вот работающее решение:

Prolog
1
2
3
4
5
6
7
8
9
10
11
domains
int=integer
intl=int*
 
predicates
ins(intl,int,int,intl)
 
clauses
ins([],_,_,[]).
ins([H|T] , X , H , RES) :-  ins(T,X,H,RES2),RES=[X,H|RES2].
ins([H|T] , X , Y , [H|RES]) :-  H<>Y,  ins(T , X , Y , RES).
1
154 / 154 / 81
Регистрация: 16.06.2012
Сообщений: 314
12.03.2016, 07:02  [ТС]
Спасибо! Решение работает хорошо!
Но прошу прощения за наглость, хотелось бы еще понять, как?)
Первый ins работает так:
Если голова списка совпадает с элементом, перед которым надо вставить, то вставляем хвост списка в новый список res2, а уже потом результатом будет добавление X к H|RES2. Это понятно)
А вот второй ins...
Почему из обоих списков выдергивается голова? Почему она должна быть одинаковой? И почему мы от нее избавляемся?

З. Ы. Возможно вопросы глупые, но хотелось бы разобраться, чтобы в будущем не было таких проблем
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
12.03.2016, 10:46
У Catstail т.н. логическая реализация с некоторой адаптацией к введенной igor_kz нотацией.
Плюс к этому не помешает разобраться и в такой
Prolog
1
2
3
4
5
6
ins_before([Y | T], Y, X, [X, Y | R]) :-
    !,
    ins_before(T, Y, X, R).
ins_before([Y1 | T], Y, X, [Y1 | R]) :-
    ins_before(T, Y, X, R).
ins_before([], _, _, []).
Цитата Сообщение от igor_kz Посмотреть сообщение
Возможно вопросы глупые, но хотелось бы разобраться, чтобы в будущем не было таких проблем
пройдите в отладчике и многие вопросы отпадут

igor_kz, если ещё разберётесь в splash, то со списками ещё более прояснится... также пропагандирую splash on swish
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2016, 10:46
Помогаю со студенческими работами здесь

Работа со списком
В общем задача следующая: Найти в графе все пути от вершины к вершине без повторных ребер и вершин. Вот программа для поиска всех...

Работа со списком
Определить функцию, которая возвращает список, у которого первый элемент является суммой списка, а второй произведением. Например: 1 2 3...

Работа со списком
Здравствуйте , уважаемые не могли бы вы скинуть исходник работы со списком .Например вставка последнего элемента в начало списка .Спосибо...

Работа со списком
В программе использовать функции: - создания списка из текстового файла - печать списка на экран - уничтожение списка - обработку...

Работа со списком
Помогите, пожалуйста, решить задачу. Есть список , где n - количество строк в одной из таблиц БД. Мне необходимо сделать в Python...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru