0
我想返回特定元素所在的嵌套列表的深度級別或數量。同樣作爲條件,該列表沒有重複的元素。我想,我有兩個主要的疑慮瞭解此解決方案: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
首先,我們爲什麼把切割操作!從1-3個陳述?我知道它會阻止編譯器在找到解決方案時考慮後面的語句。 二,我們如何能夠閱讀自然語言中的第四和第五種情況?
元素A的當列表由頭部H和其餘_分裂的深度,等於步數R加1。
profundidad([H|_],A,N):-
profundidad(H,A,R),N is R+1.
而那些兩個句子我認爲它們是同以前的,但前進到列表:
profundidad([_|X],A,N):-
profundidad(X,A,N),!.
另外,我現在懷疑,爲什麼不把[]爲遞歸調用:
profundidad(X,A,N),!.
我認爲這是深入嵌套列表,但我不確定。 謝謝。
謝謝CapelliC幫助我解決這個問題。我試圖弄清楚什麼是\ =操作符,它看起來像不是(A = B),所以它就像你說的那樣是分離的。我認爲第一種情況是微不足道的,當我們達到與外部清單相同水平的數字時;第二種方法深入到嵌套列表中,第三種方法是在外部列表中前進,因爲傳遞的A和實際的H是不同的。不管我怎麼努力:H = A,profundidad(H,A,R),因爲奇怪的是,如果你問H不是A,那麼在遞歸調用中使用H! – Enoy
我試圖在答案中解釋爲什麼測試是可選的。很明顯,如果'profundidad(H,A,R)'成功,'H' **必須是一個列表。這有幫助嗎? – CapelliC
是的,它有幫助,因爲它表明H需要成爲一個列表,而不是與請求的答案進行比較。 – Enoy