私は Scala を使い始めたばかりで、最初のプロジェクトで数独ソルバーを書いています。Sudoku とソルバーの作成方法を説明しているすばらしいサイト ( http://norvig.com/sudoku.html ) に出会い、このサイトから対応する Scala コードを作成しようとしています。
数独グリッドの正方形は、基本的に行名と列名の外積です。これは、リスト内包表記を使用して Python で非常に簡単に生成できます。
# cross("AB", "12") = ["A1", "A2", "B1", "B2"]
def cross(A, B):
"Cross product of elements in A and elements in B."
return [a+b for a in A for b in B]
Scala でこれをエレガントに行う方法を考えるのにしばらく時間がかかりましたが、これが私が思いついたものです。
// cross("AB", "12") => List[String]("A1", "A2", "B1", "B2")
def cross(r: String, c: String) = {
for(i <- r; j <- c) yield i + "" + j
}.toList
Scalaでこれを行うためのより良い方法があるかどうか、私はただ興味がありましたか? できればもっときれいに見えますが、それは何らかの理由yield i + j
で結果になります。Int
コメントや提案をいただければ幸いです。