>canReachIn3 :: KnightPos –> KnightPos –> Bool
>canReachIn3 start end = end `elem` in3 start
Мы производим все возможные позиции в пределах трёх ходов, а затем проверяем, находится ли среди них искомая.
Вот как проверить, можем ли мы попасть из >(6,2)
в >(6,1)
в три хода:
>ghci> (6, 2) `canReachIn3` (6, 1)
>True
Да! Как насчёт из >(6,
>2)
в >(7,
>3)
?
>ghci> (6, 2) `canReachIn3` (7, 3)
>False
Нет! В качестве упражнения вы можете изменить эту функцию так, чтобы она показывала вам ходы, которые нужно совершить, когда вы можете достигнуть одной позиции из другой. В главе 14 вы увидите, как изменить эту функцию, чтобы также передавать ей число ходов, которые необходимо произвести, вместо того чтобы кодировать это число жёстко, как сейчас.