Сдвиг элементов списка влево или вправо - Prolog
Формулировка задачи:
Прошу помочь новичку в прологе разобраться с одной программой
Напишите предикат p(+X, +N, ?Y), осуществляющий циклическую перестановку элементов в любом списке на N позиций (знак N говорит о направлении сдвига). Подсказка: используйте рекурсию по N; базовые случаи: N=0, N=1, N= –1.
Получилось что то вот такое (наверняка там что то совсем бредовое, но прошу не ругать):
Сдвиг вправо работает, но вот влево не хочет. Хотя если запускать сдвиг влево отдельно, то все нормально
Решение задачи: «Сдвиг элементов списка влево или вправо»
textual
Листинг программы
shift(0, L, L):- !. % Отдельное правило для выхода из рекурсии shift(N, L, R):- check(N), % проверка N,если больше 0 NN is N - 1, % если проверка проходит успешно, продолжается выполнение shift(L, TL), shift(NN, TL, R), !; % отсечение не дает выполниться второй части правила, % если первая дошла до этого места % точка с запятой начинает новую часть правила NN is -N, % сюда Пролог перейдет, если в первой части будет неуспех (например, N < 0) shift_l(NN, L, R).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д