برولوج SWI:خطأ:هو/2:لم يتم إنشاء مثيل للحجج بما فيه الكفاية
-
18-09-2020 - |
سؤال
أحاول إنشاء برنامج يطبع عدد الأرقام الناعمة الموجودة ضمن فترة زمنية.جزء من الكود موجود هنا:
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
).
هناك أيضا المسند primes
الذي يخلق جميع الأعداد الأولية من 2
ل B
.
على سبيل المثال، إذا B = 11
, ، ثم FilPrimes = [2,3,5,7,11]
.
عندما أتصل countsmooth
في SWI-Prolog مثل?- countsmooth(1, [2,3,5,7,11,13,17,19,23], 1, 100000000, Count)
.أحصل على نتيجة.
ولكن عندما أتصل smooth
يحب ?- smooth(2,100,10000,Smooths).
أحصل على الخطأ التالية:
ERROR: is/2: Arguments are not sufficiently instantiated
لا يوجد حل صحيح
نصائح أخرى
أنا آسف حقا.لقد كنت أحاول طوال اليوم اكتشاف الأخطاء التي حدثت، وأخيراً رأيت ذلك في نفس الأماكن التي كتبت فيها "FilPrimes" وفي بعض الأماكن الأخرى "Filprimes".
يا لي من مغفل!
لا تنتمي إلى StackOverflow