特定の要素があるネストされたリストの深さレベルまたは番号を返したいと思います。条件として、リストには繰り返し要素がありません。Prologネストされたリストの数+1を取得する要素がリストにある場合
profundidad([],_,0):-!.
profundidad([A],A,1):-!.
profundidad([A|_],A,1):-!.
profundidad([H|_],A,N):-
profundidad(H,A,R),N is R+1.
profundidad([_|X],A,N):-
profundidad(X,A,N),!.
正しい出力は次のようになります:
profundidad([2,3,4,5,[[6]],10],6,X).
X = 3
我々はカットオペレータを置くなぜ第一に、私は私は2つの主要な疑問を持ってこのソリューションを理解しようとしています! 1-3文から?私はそれが解決策が見つかったとき、コンパイラが後のステートメントを考慮しないことを知っています。 2番目に、4番目と5番目のケースを自然言語でどのように読み取ることができましたか?
リストがヘッドH、残り_によって分割される要素Aの深さは、数ステップのRプラス1
profundidad([H|_],A,N):-
profundidad(H,A,R),N is R+1.
に等しく、これらの2つの文は、私は彼らがいると思います前のものと同じですが、リストの中に前進する:
profundidad(X,A,N),!.
:
profundidad([_|X],A,N):-
profundidad(X,A,N),!.
プラス、私がにと呼ばれる再帰的に[]を入れないようにする理由について、今疑っています0
ネストされたリストに深く入ると思うが、わからない。 ありがとうございます。
このトピックで私を助けてくれてありがとうございました。私は\ =演算子が何であるかを調べようと苦労しました。それはそうではない(A = B)のように見えますので、あなたが言うように不平等です。私は最初のケースは外のリストの同じレベルにある番号に達すると、些細なものだと思う。第2の手段はネストされたリストに深く入り、第3の手段はAを渡し、実際のHが異なるため外側のリストに進むことです。どのように私は苦労しますか:H \ = A、profundidad(H、A、R)、あなたがHよりもdefferentであることを尋ねるなら、あなたは再帰呼び出しでHを使います。 – Enoy
私は答えがなぜテストがオプションかを説明しようとしました。明らかに、 'profundidad(H、A、R)'が成功すれば、 'H' **はリストでなければなりません。これは役に立ちますか? – CapelliC
はい、それはHが要求されたAと比較されるのではなく、リストでなければならないと述べているので役立ちます。 – Enoy