Virus: A program which attaches itself to other programs on the same computer whenever the executable containing the virus is run.
Worm: A program which attempts to send itself to other machines whenever it is run. Can also attach itself to other programs on the same computer.
The major difference between the two is that a worm attempts to send itself to other machines. The most common method these days is through e-mail though other services (web, Windows communications, etc) can and have been used. So the current batch of "e-mail viruses" are really e-mail worms.