Разделение исходного списка на список отрицательных и положительных чисел - Prolog

Узнай цену своей работы

Формулировка задачи:

Задание: Создайте предикат, который разделит исходный список из целых чисел на два списка: список положительных чисел и список отрицательных чисел.(Swi-Prolog) Сначала я создал предикат, который будет записывать мои списки чисел.
Листинг программы
  1. append([], L , L):-!.
  2. append([H|T], P, [H|Y]):-append(T, P, Y).
Затем я попытался сделать так, чтобы записывало хотя бы отрицательные числа в один список(при условии что все числа отрицательные- ну хотя бы так)
Листинг программы
  1. nez([X|W],[],[]):- [X|W] = [],!.
  2. nez([X|W],H,PP):- X<0,append([X],H,PP),PP1 = PP,nez(W,PP1,PP).
Но все равно ничего не получается, при первом вхождении в рекурсию у меня выдает false, и программа дальше не работает.
Листинг программы
  1. ?- nez([-1,-2,-3],[],X).
Вот такой вот запрос использовал... Ломаю голову второй день, спасите, люди добрые

Решение задачи: «Разделение исходного списка на список отрицательных и положительных чисел»

textual
Листинг программы
  1. nez([H|T], [H|T1], T2) :-
  2.     H < 0,
  3.     !,
  4.     nez(T, T1, T2).
  5. nez([H|T], T1, [H|T2]) :-
  6.     nez(T, T1, T2).

Объяснение кода листинга программы

  1. В данном коде используется процедура nez для разделения исходного списка на список отрицательных и положительных чисел.
  2. При первом вызове процедуры nez передаются три аргумента: [H|T], [H|T1] и T2. Здесь H - это первый элемент списка, T - это остаток списка, T1 - это список положительных чисел, а T2 - это список отрицательных чисел.
  3. Условие H < 0 проверяет, является ли первый элемент списка отрицательным числом.
  4. Если условие истинно, то происходит рекурсивный вызов процедуры nez с аргументами T, T1 и T2. Это позволяет обработать все элементы списка.
  5. Если условие ложно, то происходит рекурсивный вызов процедуры nez с аргументами T1 и T2. Это позволяет продолжить обработку списка положительных чисел.
  6. В результате работы процедуры nez список отрицательных чисел будет содержаться в T2, а список положительных чисел будет содержаться в T1.

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


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

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы