Мне нужно удалить из одного элемента в другой список. Поэтому это должно выглядеть так:Удаление из одного элемента индекса в другой в списке
?-delm(2,4,[5,6,-3,6,11,56,81],L),write(L),nl.
L = [5,11,56,81]
Так что я сделал это.
delm(A,B,C,D):-A>B,delm(B,A,C,D).
del1(1,[_|T],T):-!.
del1(N,[X|T],[X|L]):-N1 is N - 1,del1(N1,T,L).
delm(N,2,L,R):-del1(N,L,R),!.
delm(N,M,L,R):-M1 is M - 1,del1(N,L,Buf),delm(N,M1,Buf,R).
length([],0).
length([_|T],N):- length(T,N1),N is N1+1.
?-delm(2,4,[5,6,-3,6,11,56,81],L),write(L),nl.
Но мне также нужно добавить, что если одно из чисел меньше, чем 1 или больше, чем длина списка написать сообщение («Error»). Поэтому он должен выглядеть так:
?-delm(-2,4,[5,6,-3,6,11,56,81],L),write(L),nl.
"Error"
?-delm(2,-4,[5,6,-3,6,11,56,81],L),write(L),nl.
"Error"
?-delm(2,40,[5,6,-3,6,11,56,81],L),write(L),nl.
"Error"
Я не знаю, как это сделать. Пожалуйста помоги!
Предположительно вы также хотите создать «Ошибка», если 'A> B' - или это нормально? Edit: NM, я вижу, вы справились с этим в первом правиле. – Orbling
Вы хотите, чтобы он возвращал «Ошибка» для L или выводил его отдельно? – Orbling
@Orbling Я думаю, что для L, но есть ли разница? – Tanya