سؤال

لقد كتبت دالة لإرجاع الصف التالي في مثلث باسكال في ضوء الصف الحالي:

pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
    pascal_next_row([H2|T],B),
    A is H + H2.

أريد أن أكون قادرًا على العثور على الصف التاسع في المثلث، على سبيل المثال. pascal(5,Row), Row=[1,5,1,0,1,0,5,1].لدي هذا:

pascal(N,Row):-
 pascalA(N,[1,0],Row).

pascalA(N,R,_Row):-
 N > 0,
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,NR).

بوضوح Row يجب أن يكون آخر واحد تم العثور عليه من قبل n==0.كيف يمكنني إعادته؟حاولت استخدام is الكلمة الرئيسية، أي. Row is NR لكن هذا غير مسموح به على ما يبدو.أي مساعدة؟


تحاول استخدام is في القوائم يحصل لي:

! Domain error in argument 2 of is/2
! expected expression, but found [1,4,6,4,1,0]
! goal:  _23592586 is[1,4,6,4,1,0]
هل كانت مفيدة؟

المحلول

القيام بالحالة الأساسية، N > 0 يلغي حسابك..

pascalA(N,R,_Row):-
 N > 0, %% this evaluates to false so the calculation gets canceled
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,NR).

pascalA(0,R,R). %% this should be the base case... hope I got it correct...

pascalA(N,R,_Row):-
 M is N-1,
    next_row([0|R],NR),
    pascalA(M,NR,_Row).

نصائح أخرى

أنت بحاجة إلى حالة أساسية لـ pascalA حيث N = 0.

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