Improving my Tic Tac Toe Solution in Scala
you can remove main method and use extends App. It's safe 3 line of code.
replace Array('1', '2', '3', '4', '5', '6', '7', '8', '9') on ('1' to '9').toArray
I prefer always use type annotation if it is not clear. E.g.: val nextMove: Int = readMove(board)
use Intellij autoformat (ctrl + alt + L)
it is good idea to say user what is wrong with his input before prompt new one
[Char].toString.matches(&quot;[1-9]&quot;) may be replaced on [Char].isDigit (PS: may be it is not correct, because 0 is also digit)
don't use return keyword, especially in foreach, map and so on. It is not what you want, at least in this cases. foreach + forall + return should be replaced on contains + forall or something.
usually list map f used only for non-chained calls, but not for list map m filter filter collect g, because it is unclear for reader. UPDATE: also this syntax used for symbol-named functions, like +, ::, ! (in akka).
you can use special type for positive digit, for example, case class PosDigit(v: Int) {require(v &gt;= 0 &amp;&amp; v &lt;= 9, s&quot;invalide positive digit: $v&quot;)}
there is no essential reason to pass board as argument. Commonly if argument is passed, it is not changed. In your code it is not.

UPDATE for 10. In functional programming the clear way is to pass immutable collection to function and return new one if you need. It is programming without side effects. In OOP there is way to use mutable collection of class (or class's object). Scala both OOP and FP language.
Sorry for my English.