SWI Prolog две задачи
Формулировка задачи:
1)
Нужно определить предикат, который будет считывать с консоли строку текста до точки.
Если не ошибаюсь, здесь требуется использовать get0 для символьного чтения. Не откажусь от помощи в решении, но не критично, примерно представляю решение. 2)Нужно определить предикат ==.. через arg и functor.
В задании написано ==.. , вероятно это опечатка и имелось в виду =.. , но я всё равно не представляю как решать.Решение задачи: «SWI Prolog две задачи»
textual
Листинг программы
?- T = a(2,p,3.14), T =.. [F|[A1,A2,A3]], functor(T1,F,3), arg(1,T1,A1), arg(2,T1,A2), arg(3,T1,A3). T = T1, T1 = a(2, p, 3.14), F = a, A1 = 2, A2 = p, A3 = 3.14.
Объяснение кода листинга программы
T = a(2,p,3.14)- в этой части кода переменнойTприсваивается значениеa(2,p,3.14). Это называетсяобъявление переменной.T =.. [F|[A1,A2,A3]]- здесь мы используем оператор распаковки=..для извлечения значений изT.[F|[A1,A2,A3]]- это способ представления списка с тремя элементами в Prolog.F- это первый элемент списка, а[A1,A2,A3]- это остальные три элемента.functor(T1,F,3)- здесь мы используем функциюfunctor, чтобы получить информацию о функции, которую представляет термT1.F- это имя функции, а3- это номер аргумента.arg(1,T1,A1)- здесь мы используем функциюarg, чтобы получить первый аргумент функцииT1.A1- это значение этого аргумента.arg(2,T1,A2)- здесь мы используем функциюarg, чтобы получить второй аргумент функцииT1.A2- это значение этого аргумента.arg(3,T1,A3)- здесь мы используем функциюarg, чтобы получить третий аргумент функцииT1.A3- это значение этого аргумента. Таким образом, в этом коде мы объявляем переменнуюTи присваиваем ей значениеa(2,p,3.14). Затем мы используем оператор распаковки=.., чтобы извлечь значения изTи сохранить их в отдельных переменныхF,A1,A2иA3. Затем мы используем функциюfunctor, чтобы получить информацию о функции, которую представляет термT1, и функциюarg, чтобы получить значения каждого из трех аргументов этой функции.