Je veux définir la fonction dans Scala avec récursion qui retourne un ensemble de lettres qui est présent dans tous les mots de la liste.Scala, partie commune (intersection) des mots de la liste en utilisant les ensembles
Par exemple:
val l = List("rak","krab","krab","bark","mucha","mucha","trakty")
doit retourner quelque chose comme:
Set('a')
[MISE À JOUR] Mon code se présente comme suit:
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))
}
}
Pendant que je veux montrer ce que la fonction retourne en imprimant l'exécution de celui-ci
println(inAll(l))
puis j'obtiens le RuntimeException. J'ai cherché des heures sur le Net pour résoudre ce problème, mais je n'ai pas trouvé la réponse. J'ai trouvé quelque chose comme ça, mais ce n'est pas suffisant.
- http://alvinalexander.com/scala/union-intersection-difference-scala-sets
- http://docs.scala-lang.org/overviews/collections/sets.html
L'erreur que je reçois est:
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
Je pense qu'il ya quelque chose de mal dans la ligne dans laquelle je veux recouper récursive tous les mots d'un liste en appelant la fonction inALL avec le paramètre n2. Cette exception est lorsque j'essaye d'exécuter mon programme, il n'y a pas d'erreur quand je le compile.
[MISE À JOUR] Je compilez programme à l'aide
compile
dans SBT. Et l'exécuter par
run
également dans SBT.
C'est un l (L en minuscule). – mmazepa
Pouvez-vous partager le code entier s'il vous plaît, ainsi que la façon dont vous le compilez? Est-ce une erreur de compilation ou une erreur d'exécution? La plus grande partie de la stacktrace est à propos de SBT ... – Dici
C'est une erreur d'exécution. J'ai mis à jour ma question. – mmazepa