Сдвиг элементов списка влево или вправо - 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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы