C'est bien à LISP ou SCHEME que je pensais.
/>/>/>
J'ai un peu répondu sur un souvenir de cours, mais je viens de relire l'OP, je vais donc essayer de re-contextualiser ma réponse. En fait, ce type de langage (fonctionnelle) est intéressant pour faire évoluer les programmes : la régularité dans la syntaxe permet d'échanger deux bouts de code sans générer des syntax error. Je m'explique :
...
Attention, les deux exemples que tu donne dans les 2 langages n'ont pas du tout la même portée.
Pour ce code en lisp:
gen_1 : (x (+ 3 5) capteur_mesure) gen_2 : (ET obstacle_dist avancer_dist)Ce code implique que x soit un fonction dont une des arité est 2 et que ET soit une fonction d'arité variable (en lisp c'est le cas, toute la parenthèse est sommée) et permuter le premier composant plantera si l'arité de la fonction x n'est pas bonne.
on a ce code en c, en utilisant tout le sucre syntaxique que permet c:
gen 1 : x(3 + 5, capteur_mesure) gen 2 : obstacle_dist & avancer_distou, ce qui est strictement équivalent et tout aussi correct syntaxiquement en c
gen 1 : x(add(3, 5), capteur_mesure) gen 2 : et(obstacle_dist, avancer_dist)Ce code implique les mêmes contraintes syntaxiques que le code précédent en lisp, mis à part la position des parenthèses et l'ordre des mots du langage. Et oui, ça le rends plus compliqué à manipuler que celui en Lisp (du moins dans celui de la première versrion), mais en même temps de forcer à permuter dans des morceaux de syntaxe équivalents (par exemple les paramètres de 2 fonctions) peut donner un meilleur contrôle sur ce que tu fait, ça dépends de comment tu gère tes permutations, et même en lisp tu n'a pas intérêt à le faire de manière totalement aléatoire, mais à les diriger pour maintenir la consistance du programme. Donc c'est discutable, ce qui est mieux. Je pense que c'est un choix personnel après.
Ensuite, l'exemple que tu donne de code en C est instranscriptible directement en lisp (la seconde ligne n'existe pas comme brique élémentaire, affecter, puis muter une var est impossible en lisp). Attention, on peut faire en lisp un programme équivalent à celui en C qui utilisera ton extrait en C, mais on passe alors à un paradigme de liste splitée et de la réccurence, comme pour tout ce qui n'est pas trivial comme opération dans ces langages. La puissance syntaxique n'étant pas la même, c'est difficile de comparer la pertinence du sous ensemble du programme traité. En fait, on ne joue pas avec les mêmes briques élémentaires. Après, c'est peut être intéressant aussi de ne pas avoir de variables a manipuler... Là encore, c'est à voir.
Enfin, le problème de c, c'est surtout que ce code ne fonctionnera pas sans avoir construit la déclaration des variables idoine avant, mais c'est un problème que tu n'aurais pas par exemple, en python, tout en gardant tout le reste (plus le garbage collecting, etc...).