2017-06-08 133 views
-3

這是繼無限循環,Clojure中這樣的事情就好了科特林無限循環的遞歸

tailrec fun passHeaders (xH: List<Int>) 
{ 
    while (xH.isNotEmpty()) 
    { 
     passHeaders(xH.drop(1)) 
    } 
} 
+0

爲什麼你期望這個循環終止? –

+0

爲什麼所有的反對票? – voddan

回答

0

如果xH不爲空,這個函數的第一個電話將永遠不會終止。 .drop()不會修改原始列表。

+0

這不是,而是產生新的 –

2

List.drop不改變List,而是產生一個新的List實例。因此,你是while循環是無限的。

+0

它不是,但產生新的 –

2

您不提供基本案例,這就是爲什麼。因爲在每次撥打passHeaders時,xH是自己的副本,因此永遠不會是空的。請記住,當您撥打drop()時,會創建一個新列表。

while (xH.isNotEmpty()) 

它說的是「,而我的xH副本是不是空的,叫passHeaders

在另一方面:。

if (xH.isNotEmpty()) 

可能會做你想要什麼

+1

謝謝,這是解決問題。 –