Java Scala,使用集合的列表中单词的公共部分(交叉点)

Java Scala,使用集合的列表中单词的公共部分(交叉点),java,scala,recursion,set,runtimeexception,Java,Scala,Recursion,Set,Runtimeexception,我想用递归在Scala中定义函数,它返回列表中所有单词中的字母集 例如: val l = List("rak","krab","krab","bark","mucha","mucha","trakty") 应该返回如下内容: Set('a') [更新]我的代码如下所示: object Program { def main(args: Array[String]): Unit = { val l = List("rak","kr

我想用递归在Scala中定义函数,它返回列表中所有单词中的字母集

例如:

    val l = List("rak","krab","krab","bark","mucha","mucha","trakty")
应该返回如下内容:

    Set('a')
[更新]我的代码如下所示:

    object Program {
        def main(args: Array[String]): Unit = {

            val l = List("rak","krab","krab","bark","mucha","mucha","trakty")

            def inAll(lista: List[String]): Set[Char] = l match {
                case Nil => Set()
                case n :: Nil => n.toSet
                case n :: n2 => n.toSet & inAll(n2)
            }

            println(inAll(l))
        }
    }
而我想通过打印函数的执行来显示函数返回的内容

    println(inAll(l))
然后我得到运行时异常。我已经在网上搜索了几个小时如何解决这个问题,但我还没有找到答案。我找到了这样的东西,但还不够

我得到的错误是:

    java.lang.RuntimeException: Nonzero exit code: 1
        at scala.sys.package$.error(package.scala:27)
        at sbt.BuildCommon$$anonfun$toError$1.apply(Defaults.scala:2128)
        at sbt.BuildCommon$$anonfun$toError$1.apply(Defaults.scala:2128)
        at scala.Option.foreach(Option.scala:236)
        at sbt.BuildCommon$class.toError(Defaults.scala:2128)
        at sbt.Defaults$.toError(Defaults.scala:39)
        at sbt.Defaults$$anonfun$runTask$1$$anonfun$apply$46$$anonfun$apply$47.apply(Defaults.scala:769)
        at sbt.Defaults$$anonfun$runTask$1$$anonfun$apply$46$$anonfun$apply$47.apply(Defaults.scala:767)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    [error] (compile:run) Nonzero exit code: 1
我认为在我想通过调用带有参数n2的函数inAll递归地与列表中的所有单词相交的行中有问题

    case n :: n2 => n.toSet & inAll(n2)
这个异常是当我试图运行我的程序时,编译它时没有错误

[更新]我使用

    compile
在SBT中。然后运行它

    run

同样在SBT中。

您的
inAll
函数使用
l
匹配
,而不是函数的参数
lista


这可能会导致堆栈溢出或内存不足异常,并导致程序崩溃。

这是一个l(小写为l)。您能否共享整个代码以及编译它的方式?这是编译时错误还是运行时错误?大多数stacktrace都是关于SBT的…这是一个运行时错误。我更新了我的问题。@mmazepa您可能没有向我们显示异常的正确部分。您提交的异常与实际发生的情况完全无关。不是说这是卑鄙的,只是告诉你你需要学会识别stacktrace中什么是重要的,什么不是。在本例中,stracktrace并没有真正起到作用,因为它只是关于SBT,而不是关于您的代码