Мета-ответ:
Есть несколько уроков, которые полезно перенести на C из функциональных языков: используйте маленькие функции, используйте функции, которые не изменяют ни глобальные, ни входные аргументы, не пугайтесь указателей на функции. Но есть предел тому, что вы можете разумно сделать здесь, и полагаться на устранение хвостовых вызовов («хвостовой вызов оптимизация » не совсем правильный термин), вероятно, за пределами того, что полезно Вы не можете заставить компилятор использовать эту стратегию, и даже если бы вы могли, результирующий C был бы чрезвычайно однотипным, и его было бы трудно прочитать другим, включая вашу будущую личность.
Используйте языки в своих сильных сторонах. C подходит для некоторых вещей, так что используйте его для тех, в хорошем стиле C. Если вам нужны разные сильные стороны или вы хотите использовать функциональный стиль (отличное решение!), Используйте функциональный язык.