I am trying to make a simulation of Conway's Game Of Life with my matrix blocks (shameless plug) and I need to find the values of each point's neighbors to change it. This is how I am doing it now:
You could use a variable that changes by 1 if the point exists, so just do change sides by (point (x) (y) exists in matrix (world)? This would only work if the vale it reports is a boolean, or 1/0.
There's many,many different ways of calculating the number of neighbours but if you make your matrix only contain 1 or 0 for alive or dead then you don't need the if statements - you can just add up all the point values
Lots of interesting answers from different people.
My own preferred approach is to make an array that's n+2 long and wide, where n is the number of points you want to use, and use coordinates 2 to n+1 for the actual points:
(and whatever you want to do for each point in the c-slot). That way, every point has all eight neighbors existing in the array.
If the proper value for a nonexistent point is zero, then as cymplecy says, you can take advantage of the fact that Snap! doesn't give you an error message for a nonexistent index in a list, just have the n by n array, and in effect every point still has eight neighbors. But I learned to program in less forgiving languages, so I put the border in explicitly.
By the way, you can say and the same for COLUMN to get all the neighbor coordinates (plus the point itself; if you don't want that you have to remove it from the resulting list of coordinate pairs).
note, this reporter includes the value of the given point itself. I always use something like that if I want to aggregate a "tile" inside a matrix, e.g. the average color for a "pixellate" effect in a photo. In that case I want the value of the given coordinate. If you only want the neighbors without the given coordinate you'd need to filter that single value out.