質問

私は現在の行所与パスカルの三角形の次の行を返す関数を書かれている:

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

Iは、例えば、三角形内のn番目の行を見つけることができるようにします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前に見つかった最後の1 n==0でなければなりません。どのように私はそれを返すことができますか?私は、すなわちisRow is NRキーワードを使用してみましたが、それはapparantly、許可されていません。すべてのヘルプ?

<時間>

リストに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).

他のヒント

あなたがN = 0 pascalAための基本ケースを必要とする。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top