SWI-Prolog:ERREUR:est/2:Les Arguments ne sont pas suffisamment instancié
-
18-09-2020 - |
Question
Je suis en train de créer un programme qui affiche combien de lisser les numéros sont dans un intervalle.Une partie du code est ici:
countsmooth(_, [], _, _, Count) :-
Count is 0.
countsmooth(X, [H|T], Min, Max, Count) :-
( Y is X*H,
Y =< Max
-> ( Y >= Min
-> NewX is X*H,
countsmooth(X, T, Min, Max, NCount1),
countsmooth(NewX, [H|T], Min, Max, NCount2),
Count is (1+NCount1+NCount2)
; NewX is X*H,
countsmooth(X, T, Min, Max, NCount1),
countsmooth(NewX, [H|T], Min, Max, NCount2),
Count is (NCount1+NCount2)
)
; Count is 0
).
smooth(B, I, J, Smooths) :-
( B =< 1
-> Smooths is 0
; I =:= 1
-> primes(B, FilPrimes),
countsmooth(1, Filprimes, I, J, Count),
Smooths is (1+Count)
; primes(B, FilPrimes),
countsmooth(1, Filprimes, I, J, Count),
Smooths is Count
).
Il y a aussi un prédicat primes
qui crée tous les nombres premiers à partir de 2
pour B
.
Par exemple, si B = 11
, puis FilPrimes = [2,3,5,7,11]
.
Quand je l'appelle countsmooth
en SWI-Prolog comme
?- countsmooth(1, [2,3,5,7,11,13,17,19,23], 1, 100000000, Count)
.Je obtenir un résultat.
Mais quand je l'appelle smooth
comme ?- smooth(2,100,10000,Smooths).
J'obtiens l'erreur suivante:
ERROR: is/2: Arguments are not sufficiently instantiated
Pas de solution correcte
Autres conseils
Je suis vraiment désolé.J'ai essayé toute la journée pour trouver ce qui n'allait pas et finalement j'ai vu que dans les mêmes endroits que j'avais écrit "FilPrimes" et dans quelques autres endroits "Filprimes".
Je suis comme un idiot!