To compute a function such as a mapping from vertices to colors in the graph coloring problem, current practice in Answer Set Programming is to represent the function as a relation. Among other things, this often makes the resulting program unnecessarily large when instantiated on a large domain. The extra constraints needed to enforce the relation as a function also make the logic program less transparent. In this paper, we consider adding functions directly to normal logic programs. We show that the answer set semantics can be generalized to these programs straightforwardly. We also show that the notions of loops and loop formulas can be extended, and that through program completion and loop formulas, a normal logic program with functions can be transformed to a Constraint Satisfaction problem.