ai :: SearchProblem :: apply_action
The returned state can be:
== and hash method
are correctly implemented.Remember, this method should not modify its parameters.
REQUIRE: actions(state).has(action)
	# The new state when applying a given action
	#
	# The returned state can be:
	# * a completely new state,
	# * an existing state,
	# * a new state but equals to an existing state
	#   in this case, ensure that the `==` and `hash` method
	#   are correctly implemented.
	#
	# Remember, this method should not modify its parameters.
	#
	# REQUIRE: `actions(state).has(action)`
	fun apply_action(state:S, action:A): S is abstract
					lib/ai/search.nit:71,2--83,51
				
	# Return the state where the tile at hole+action has moved
	redef fun apply_action(state, action)
	do
		# Copy the state
		var res = new ArrayCmp[Tile].with_capacity(state.length)
		res.add_all(state)
		# Get the hole and the tile next to it
		var h = get_hole(res)
		var t = h + action
		# Move (by swapping the tile and the hole)
		res[h] = res[t]
		res[t] = hole
		return res
	end
					lib/ai/examples/puzzle.nit:111,2--127,4