2017-06-08 82 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

谢谢,这是解决问题。 –