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は、charと組み合わせているList[List[Char]]を返します。

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

wrd.tailのタイプはList[Char]であるため、2番目の例は問題ありません。

編集:それを解決する方法は?これはおそらくコースラでの割り当てのためであるため、私はそれをあなたに任せます。単語全体と、anagへの再帰呼び出しによって返されるすべての部分的な解決策を繰り返す必要があります(理解度を確認してください)

また、scalaライブラリのメソッド順列を使用してリストのすべての順列を見つけることもできます。

wrd.permutations.toList
于 2012-11-01T20:02:17.953 に答える