0

我正在尝试递归地实现一个方法,但我很困惑,因为在某些时候编译器认为它返回List[List[Any]]而不是List[List[Char]]. 这是我的功能:

def anag(wrd: List[Char]): List[List[Char]] = if(wrd.isEmpty) List(wrd)
    else wrd.map(l => l :: anag(wrd.tail)) //found: List[List[Any]]

def anag(wrd: List[Char]): List[List[Char]] = if(wrd.isEmpty) List(wrd)
    else wrd.map(l => l :: wrd.tail) //OK  

我错过了什么?

4

1 回答 1

1

函数 anag 返回 List[List[Char]] 您将它与 char 组合:

l :: anag(wrd.tail) //prepending a char to a list of List[Char]

第二个例子没问题,因为 wrd.tail 是 List[Char] 类型

编辑:如何解决?因为这可能是针对 coursera 上的作业,所以我将把它留给你。您只需要遍历整个单词和递归调用 anag 返回的所有部分解决方案(查看理解)

您还可以使用 scala 库中的方法排列找到列表的所有排列:

wrd.permutations.toList
于 2012-11-01T20:02:17.953 回答