В основном я хочу удалить первые цифры N
из списка, функция, которая проверяет, является ли число простым или нет, работает хорошо, но сама программа неУдаление первых N простых чисел из списка (Prolog)
Например, для ввода [2,4,5,7,6,9,11]
и N = 3
Я должен получить [4, 6, 9, 11]
, но я получаю только [4, 6, 9]
.
divisible(X,Y) :-
0 is X mod Y, !.
divisible(X,Y) :-
X > Y+1,
divisible(X, Y+1).
%isPrime function check whether or not the argument is a prime number
isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).
%delFunction (input_list, N, output_list)
delFunction([],_,_).
delFunction(_,0,_).
delFunction([H|T], N, [H|Res]):-
not(isPrime(H)), !,
delFunction(T, N, Res).
delFunction([_|T], N, Res):-
N1 is N-1,
delFunction(T,N1,Res).
delFunction([2,4,5,7,6,9,11],3,X)
->[4,6,9]
(который не является правильным ответом)
Честно говоря, я не знаю, где я пошел не так, идея реализации кажется довольно легко и прямо вперед, так что это код.
Кроме того, когда я запускаю его, он останавливается на [4]
, и я должен продолжать нажимать рядом, чтобы привести меня к концу выполнения (таким образом, результат). Любая идея, как это исправить? Я думаю, может быть, мне нужны некоторые сокращения, но не знаю, где.
PS: Я предпочел бы не использовать встроенные функции (если таковые имеются, которые помогли бы в этом сценарии)
Да, это мои проблемы. Конечный результат не правильный, и он дает мне несколько ответов (когда он должен дать только один, очевидно). Все еще думайте, что это неправильное использование! где-то ... – Hansewl