CSE 5326 HW7 Due: Wednesday, November 20 at midnight (electronically) Write a Prolog predicate apply_ops(State,NewStates) that functions similarly to the APPLY-OPS function from HW2. You should be able to follow the solution in /usr/student/cs5326/puzzle.lisp when constructing your Prolog solution. That is, you can write auxiliary predicates apply_op(up,Desc,NewDesc), apply_op(down,Desc,NewDesc), etc., and swap_tiles(Tile1,Tile2,Desc,NewDesc). Of course, you may write apply_ops in another way if you choose. For the Prolog version, a state is a list like: [[1,2,3,4,5,6,7,8,0],[up,left,down]] where the first element of the list is a description of the board, and the second element of the list if the reverse of the path leading to the state. Therefore, the example calls from HW2 will look like: ?- apply_ops([[1,2,3,4,0,5,7,8,6],[]],NewStates). NewStates = [[[1,0,3,4,2,5,7,8,6],[up]], [[1,2,3,4,8,5,7,0,6],[down]], [[1,2,3,0,4,5,7,8,6],[left]], [[1,2,3,4,5,0,7,8,6],[right]]] ; no ?- apply_ops([[1,2,3,4,5,0,7,8,6],[right]],NewStates). NewStates = [[[1,2,0,4,5,3,7,8,6],[up,right]], [[1,2,3,4,5,6,7,8,0],[down,right]], [[1,2,3,4,0,5,7,8,6],[left,right]]] ; no ?- After completing your solution, hand it in using the handin-hw7 program. Besure to comment your code and test it thoroughly.