読者です 読者をやめる 読者になる 読者になる

AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

Scalaで8クイーン問題

技術ネタ Scala

What's the 8 Queen Problem


エイト・クイーン - Wikipedia

チェス盤の上にクイーンが取り合わないように何体置けるかというやつですね。Scala練習がてら作ってみた

やりかた


  • 指定数おけたら終了(depth)
  • 残り置ける場所(targets)がなかったら失敗
  • 置けるのであればおいて再帰
  • (targets.headに)置けないのであればそこ以外で再検索(target.tailを指定して再帰)

  • あとは全点で呼び出して頑張ってもらう

まとめ


  • c#のyieldとかまるっきり挙動というか概念が違う
    • c#ではIEnumerable[T]が帰ってくるのに対してScalaはIndexedSeq[T]が帰る
      • というかScalaのyieldはfor文が評価された結果返される値であってそもそもIEnumerable[T]の集合を返すものとはぜんぜん違う
  • IndexedSeq連結 Map連結 ++
  • Listのhead, tailはものすごく有用
  • 再帰するには再帰関数の戻り値の型を明示しなければならない

関数型はまだなれなくて思うように使いこなせていない。でも既存の言語だけでは手持ちの選択肢としての言語が少し足りない気がした。

8 Queen Problem with Scala