Je pense qu'une chose que vous rencontrez probablement est quelque chose que j'ai rencontré aussi lors de l'apprentissage de la programmation fonctionnelle, c'est qu'avec la programmation fonctionnelle vous pouvez (et presque devez) penser / travailler à un niveau plus élevé que vous ne le faites avec la programmation impérative.
Ce que vous trouvez moins expressif, je pense qu'il est en fait plus expressif: vous n'avez pas besoin d'énoncer chaque petit détail et pouvez faire plus avec moins de code dans la programmation fonctionnelle - il y a plus de puissance dans ce que vous écrivez.
Par exemple, je pourrais écrire impérativement:
for each (Person person in people)
print(person.name)
qui est totalement lisible en anglais.
Une version Haskell pourrait être (et ce n'est pas Haskell valide, mais c'est juste pour une comparaison syntaxique):
map (print . name) people
ce qui nécessite moins de code et moins de détails - je n'ai pas à décomposer les choses en boucle et ses variables ( for each (...)
), la map
fonction s'en charge pour moi.
Travailler à ce niveau peut prendre un certain temps pour s'y habituer. Si cela peut aider, Haskell a probablement été le moment le plus difficile pour moi d'apprendre une nouvelle langue depuis que j'ai commencé la programmation, et je connais> 10 langues (dont Lisp). Cela valait vraiment la peine d'apprendre.