Noobie question on display lists

There is no actual problem, I just want to understand display lists better.

The code below is (obviously) part of a larger program. In main, init_ground is called. After, the glut loop is entered, and the callback functions are looped through, one of which calls a display function, which calls the display list ‘ground’.

The bit that confuses me is how does the display function know what the contents of the 2 arrays are (needed for the material properties) if it is only calling the display list?

void init_ground()
{
	GLfloat amb_and_diffuse[]= {0.1, 0.7, 0.1, 1.0};
	GLfloat emission[]= {0.0, 0.2, 0.0, 1.0};

	ground = glGenLists(1);
	if (ground!=0)
	{
		glNewList(ground, GL_COMPILE);
			glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, amb_and_diffuse);
			glMaterialfv(GL_FRONT, GL_EMISSION, emission);

			glBegin(GL_QUADS);
				glNormal3f(0.0, 1.0, 0.0);
				glVertex3f(-100.0, 0.0, -100.0);
				glVertex3f(100.0, 0.0,-100.0);
				glVertex3f(100.0, 0.0, 100.0);
				glVertex3f(-100.0, 0.0, 100.0);
			glEnd();
		glEndList();
	}
	else
		fprintf(stderr, "Error: OpenGL could not obtain a list for the ground
");
	return;
}

http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml
Apart from the exceptions listed in the documentation, every gl command is compiled within the display list, even glMaterialfv commands and their parameters.
Imagine GL commands are assembly instructions for a Lego toy. Display list compiles the finished result to a 3D printing that can be build with 1 instruction.

So, if material commands require arrays outside of the display list, those arrays are compiled with the commands in the display list?

Yes.
Think about it : if it was not the case, the performance benefits of using display lists would disappear.