Привет Я новичок в Прологе и пытается написать небольшую программу на Прологе, чтобы узнать его ....Проблема в Прологе Программирование
Я написал программу для удаления позиционного элемента означает удалить (Список, 2 , Ans) будут удалены все элементы позиции 2,4,6,8 .... из списка ... ниже моя логика
remove(L,N,Ans):-
length(L,LEN),
T1 is 1 mod N,
add(L,N,[],LEN,T1,Res).
add(L,N,Ans,0,T,Ans).
add([H|T],N,Ans,LEN,0,Res):-
LEN1 is LEN-1,
T1 is 1 mod N,
add(T,N,Ans,LEN1,T1,Res).
add([H|T],N,Ans,LEN,T,Res):-
T =\= 0, LEN =\= 0,
LEN1 is LEN-1,
T1 is T1+1,
T2 is T1 mod N,
append([H],Ans,Result),
add(T,N,Result,LEN1,T2,Res).
, но каждый раз, когда я бегу он терпит неудачу при поиске добавить. ниже - трассировка программы, которая имеет для конкретного экземпляра
[trace] ?- remove([1,2,3,4,5,6,7,8],2,X).
Call: (6) remove([1, 2, 3, 4, 5, 6, 7, 8], 2, _G2941) ? creep
Call: (7) length([1, 2, 3, 4, 5, 6, 7, 8], _G3039) ? creep
Exit: (7) length([1, 2, 3, 4, 5, 6, 7, 8], 8) ? creep
Call: (7) _G3041 is 1 mod 2 ? creep
Exit: (7) 1 is 1 mod 2 ? creep
Call: (7) add([1, 2, 3, 4, 5, 6, 7, 8], 2, [], 8, 1, _G3046) ? creep
Fail: (7) add([1, 2, 3, 4, 5, 6, 7, 8], 2, [], 8, 1, _G3046) ? creep
Fail: (6) remove([1, 2, 3, 4, 5, 6, 7, 8], 2, _G2941) ? creep
false.
Кто-нибудь знает, где проблема?
, но в этом случае последнее добавление будет выбрано путем объединения этого 1 с T. –
'1 mod N' всегда' 1', если 'N> 1' не так ли? – lurker
@ lurker Непонятно, когда при вызове Call: (7) добавьте ([1, 2, 3, 4, 5, 6, 7, 8], 2, [], 8, 1, _G3046)? ползучести ... почему он не справляется с этой целью или унифицирует это последним добавлением ...... –