مثلث باسكال في برولوج
-
20-09-2019 - |
سؤال
لقد كتبت دالة لإرجاع الصف التالي في مثلث باسكال في ضوء الصف الحالي:
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.
لا تنتمي إلى StackOverflow