Swiftで8人の女王その2¶
reduceの代わりにjoinを使うとメソッドdebugPrintが簡潔にかけるようになった。 文字列の結合や配列の結合くらいでは、joinの方が見た目が綺麗。
// debug用出力
func debugPrint()
{
// 数列に対するmap&joinedを行い、デバッグ文字列を作成する
print(
( 0..<queens.count ).map
{
i -> String in // ここで引数に名前をつけないと内側のmapのクロージャでアクセスできない。
(0..<sizeN).map{ $0 == queens[i] ? " q" : " ." }.joined() + "\n"
}.joined()
)
}
メソッドresolveの方はreduceの代わりにflatMapを二重にかけた方が簡潔に見える。
func resolve() -> [EQBoard]
{
precondition(queens.count <= self.sizeN)
func resolve_intarnal( _ count:Int, _ boards:[EQBoard]) -> [EQBoard]
{
return count == 0 ? boards :
resolve_intarnal(
count - 1,
boards.flatMap
{
i -> [EQBoard] in // この記述がないと曖昧(ambiguous)でわからぬとエラーが出る
(0..<i.sizeN).flatMap
{
i.tryAddAQueen($0) ? i.boardAddAQueen($0) : nil
}
})
}
return resolve_intarnal(self.sizeN, [self])
}
参考文献とソースコード¶
- Logo 人工知能へのアプローチ
https://www.amazon.co.jp/Logo-人工知能へのアプローチ-ラジオ技術選書-150-祐安-重夫/dp/4844301500
Comments
comments powered by Disqus