-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBoard.hs
24 lines (23 loc) · 1.46 KB
/
Board.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{-
Пусть имеется тип данных, который описывает конфигурацию шахматной доски:
data Board = ...
Кроме того, пусть задана функция
nextPositions :: Board -> [Board]
которая получает на вход некоторую конфигурацию доски и возвращает все возможные
конфигурации, которые могут получиться, если какая-либо фигура сделает один ход.
Напишите функцию:
nextPositionsN :: Board -> Int -> (Board -> Bool) -> [Board]
которая принимает конфигурацию доски, число ходов n, предикат и возвращает все
возможные конфигурации досок, которые могут получиться, если фигуры сделают n
ходов и которые удовлетворяют заданному предикату. При n < 0 функция возвращает
пустой список.
-}
--Тип Board и функция nextPositions заданы, реализовывать их не нужно
nextPositionsN :: Board -> Int -> (Board -> Bool) -> [Board]
nextPositionsN b n pred
| n < 0 = []
| n == 0 = [b | pred b]
| otherwise = do
nextBoard <- nextPositions b
finalBoard <- nextPositionsN nextBoard (n-1) pred
return finalBoard