Por definicion de los lenguajes funcionales, los procedimientos no pueden devolver valores, si lo hacen las funciones. Para hacer que un procedimiento devuelva algun dato tienes que utilizar variables publicas, y modificarlas en tu procedimiento. De ese modo los cambios que realices en estas variables estaran visibles en cualquier parte de tu programa, y estas sujeta a efectos co-laterales no deseados.
Si necesitas que trabaje con variables locales y devolver datos deberas utilizar funciones. El trabajo con funciones es una muy buena tecnica de programacion. Deberias intentar no utilizar nunca procedimiento y siempre funciones que trabajen con variables locales y devuelvan los datos necesarios. De ese modo, y una vez que la has probado y te funciona, siempre podras re-utilizar tu funcion en otro programas sin necesidad de precuparte de nada. Solo necesitas saber que datos entran y cuales salen, el resto de lo que pasa en la funcion no te preocupa y no influye en tu programa.
Saludos.-