Если длина списка нечетна, построить список, поменяв местами левую и правую часть списка - Prolog
Формулировка задачи:
Дан список L. Если длина списка нечетна, построить список L1, поменяв местами левую и правую часть списка, в противном случае оставить список без изменения.
Как я понял,надо сначала создать список L.Потом создать предикат нечетного и после этого мы создаем L1? И как примерно будет выглядит код на SWI-пролог? Заранее благодарен.Решение задачи: «Если длина списка нечетна, построить список, поменяв местами левую и правую часть списка»
textual
Листинг программы
domains int=integer intl=int* predicates app(intl,intl,intl) len(intl,int) head(intl,int,intl) tail(intl,int,intl) task(intl,intl) clauses app([],X,X). app([H|T],X,[H|Y]) :- app(T,X,Y). len([],0). len([_|T],N) :- len(T,N1),N=N1+1. head(_,0,[]). head([H|T],N,[H|Z]) :- N1=N-1, head(T,N1,Z). tail(X,0,X). tail([_|T],N,Q) :- N1=N-1, tail(T,N1,Q). task(X,X) :- len(X,L), L mod 2 = 0. task(X,Y) :- len(X,L), L mod 2 = 1, K=L div 2, head(X,K,LL), tail(X,K,[H|RR]), app(RR,[H],R1), app(R1,LL,Y).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д