The goal of this research is the design, implementation, and realistic application of a functional programming language supporting the development of scientific codes. Functional languages and scientific computing appear to be singularly mismatched. The problem is not with the expressiveness of these languages, which is excellent, but their efficiency, which is poor. Recent research in functional languages suggests that assignment may in fact be consistent with referential transparency, if care is taken in the overall language design. This research uses one such language, the Imperative Lambda Calculus (ILC), to develop programs in the domain of random process modelling. Although inefficiency on sequential processors has long been a drawback of functional languages, their efficiency on parallel processors has been a strong attraction. An important goal of this research is to obtain an efficient parallel implementation of ILC. The potential for success in this endeavor is high because the presence of assignment in ILC obviates the transformation to imperative form, leaving the compiler to handle only the (well understood) problems of higher-order functions and lazy evaluation themselves. To fully exploit modern parallel architectures, especially non-uniform memory access machines, control over the placement of data and scheduling of tasks needs to be provided by way of parallel language extensions to ILC.