برولوج SWI:خطأ:هو/2:لم يتم إنشاء مثيل للحجج بما فيه الكفاية

StackOverflow https://stackoverflow.com/questions/3299445

  •  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".

يا لي من مغفل!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top