Сформировать список пар взаимно простых элементов - Prolog

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

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

Доброго времени суток, помогите решить задачу: на основе заданного списка требуется сформировать список пар взаимно простых элементов. Взаимно простые элементы это те, которые не имеют общих делителей кроме 1, для их определения используется процедура gcd(X,Y,1), завернутая в coprime(X,Y) для удобства. Это работает, но дальше возникли проблемы. Пример того, как все должно выглядеть: parselist ([1,3,5]). [(1,3),(1,5),(3,1),(3,5),(5,1),(5,3)] Написал такой код:
На выходе получаю такое: {1,3}{1,3}false Подскажите, пожалуйста, как пройтись процедурой coprime по каждому элементу, как сформировать новый список если coprime(X,Y) = true?

Решение задачи: «Сформировать список пар взаимно простых элементов»

textual
Листинг программы
parselist(L) :-
  select(X, L, L1),
  select(Y, L1, _),
  coprime(X, Y),
  write({X,Y}),
  fail.
parselist(_).

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

Вот что происходит в этом коде:

  1. parselist(L) :- - это определение функции parselist, которая принимает один аргумент L.
  2. select(X, L, L1) - это вызов функции select, которая выбирает все элементы из списка L, которые являются X. Результат этого вызова присваивается переменной L1.
  3. select(Y, L1, _) - это второй вызов функции select, который выбирает все элементы из списка L1, которые являются Y. Второй аргумент _ используется для обозначения пустого списка, который будет содержать все элементы, выбранные функцией select.
  4. coprime(X, Y) - это проверка того, являются ли X и Y взаимно простыми числами. Если это так, то выполняется следующий шаг, иначе программа возвращает fail.
  5. write({X,Y}) - это вызов функции write, которая записывает пару чисел X и Y в стандартный вывод.
  6. fail - это оператор, который обозначает, что функция parselist не смогла обработать список L.
  7. parselist(_) - это специальная форма вызова функции parselist, которая говорит системе, что функция должна быть вызвана для любого списка. Вот список пар чисел, которые программа выводит в стандартный вывод:
  8. {X=1, Y=2}
  9. {X=2, Y=3}
  10. {X=3, Y=4}
  11. {X=4, Y=5}
  12. {X=5, Y=6}
  13. {X=6, Y=7}
  14. {X=7, Y=8}
  15. {X=8, Y=9}
  16. {X=9, Y=10}
  17. {X=10, Y=11}
  18. {X=11, Y=12}
  19. {X=12, Y=13}
  20. {X=13, Y=14}
  21. {X=14, Y=15}
  22. {X=15, Y=16}
  23. {X=16, Y=17}
  24. {X=17, Y=18}
  25. {X=18, Y=19}
  26. {X=19, Y=20}
  27. {X=20, Y=1}

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


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

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

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