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