takeFirst([[HH|_]|T],Ra,R) :-
Rb is Ra+HH,
takeFirst(T,Rb,R).
だから我々が得る一緒にそれを置く:あなたの質問には非常に明確ではありませんでした
takeFirst(L,R) :-
takeFirst(L,0,R).
takeFirst([],R,R).
takeFirst([[HH|_]|T],Ra,R) :-
Rb is Ra+HH,
takeFirst(T,Rb,R).
何かがどうあるべきかであります[[1,2,3],[],[7,8,9]]
のように、リストに空のリストがある場合に実行します。上記の述語は失敗します:すべてのリストに少なくとも1つの要素があることを期待します。だから我々は、リストは、我々は単にテールで再帰呼び出しを実行した場合のパターン[[]|T]
を、以下のケースを追加
takeFirst2(L,R) :-
takeFirst2(L,0,R).
takeFirst2([],R,R).
takeFirst2([[]|T],Ra,R) :-
takeFirst2(T,Ra,R).
takeFirst2([[HH|_]|T],Ra,R) :-
Rb is Ra+HH,
takeFirst2(T,Rb,R).
T
:あなたは、単にこれらのリストを無視したい場合は、あなたがにあなたのコードを変更することができます。
述語の上に与えられたに基づいて、ヘッドのリストを構築することにも難しいことではありません。
heads([],[])
heads([[HH|_]|TA],[HH|TB]) :-
heads(TA,TB).
与えられたリストの中の空のリストがある場合には何をすべきか? –
Prologで要素を追加することはできません。 Prologは*宣言型言語です。つまり、変数の割り当て時に変数を変更することはできません。 –
私は誤って「追加する」と言っていましたが、すべてのリストの最初の要素のリストを返しています。この場合、私が言ったように '[1,4,7]'を返します。 Imは基本的に私がそれに先立っていくつかの問題を抱えていたので、 'RbはRa + HH'を 'Rb = [Ra、HH]'に置き換えることができるかどうかを尋ねています – mooly