Ich möchte die Tiefe oder Anzahl der verschachtelten Liste, wo bestimmte Element ist. Auch als Bedingung enthält die Liste keine wiederholten Elemente. Ich versuche, diese Lösung zu verstehen, wo ich zwei Haupt Zweifel haben:Prolog die Anzahl der verschachtelten Liste + 1, wo ein Element in eine Liste ist
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),!.
Die richtige Ausgabe wäre:
profundidad([2,3,4,5,[[6]],10],6,X).
X = 3
Erstens, warum wir den Schnitt Betreiber tun setzen! von 1-3 Aussagen? Ich weiß, dass es den Compiler daran hindert, spätere Anweisungen zu berücksichtigen, wenn eine Lösung gefunden wird. Zweitens, wie könnten wir 4. und 5. Fälle in natürlicher Sprache lesen?
Die Tiefe eines Elements A, wenn die Liste durch den Kopf H und dem Rest _ gespaltet wird, ist gleich der Anzahl von Schritten sowie R 1.
profundidad([H|_],A,N):-
profundidad(H,A,R),N is R+1.
und diese beiden Sätze Ich denke, sie sind die gleiche wie die vorherigen, aber nach vorne in die Liste zu gehen:
profundidad([_|X],A,N):-
profundidad(X,A,N),!.
plus bin zu zweifeln ich jetzt, warum nicht [in rekursiven] aufgerufen setzen:
profundidad(X,A,N),!.
Ich denke, es ist tief in die verschachtelten Listen zu gehen, aber ich bin mir nicht sicher. Danke.
Vielen Dank CapelliC für die Hilfe bei diesem Thema. Ich habe versucht, herauszufinden, wofür es \ = operator ist, und es sieht so aus, als ob es nicht bedeutet (A = B), also ist es disjunction, wie du sagst. Ich denke, der erste Fall ist der triviale, wenn wir eine Zahl erreichen, die auf der gleichen Ebene der äußeren Liste ist; das zweite bedeutet, tief in die verschachtelten Listen einzudringen, und das dritte bedeutet, auf der äußeren Liste vorwärts zu gehen, weil A und H verschieden sind. Aber ich kämpfe mit: H \ = A, profundidad (H, A, R), weil es merkwürdig ist, wenn du fragst, H ist anders als A, dann verwendest du H im rekursiven Ruf! – Enoy
Ich versuchte in der Antwort zu erklären, warum der Test optional ist. Wenn "profundidad (H, A, R)" erfolgreich ist, muss "H" ** eindeutig eine Liste sein. Hilft das ? – CapelliC
Ja, es hilft, weil es besagt, dass H eine Liste sein muss, anstatt mit dem angeforderten A verglichen zu werden. – Enoy