Bonsoir les zestes,
Je me baladais sur la toile et après une soirée fort fructueuse à découvrir plein de trucs aussi inutiles qu'indispensables, et à commencer à m'introduire au LISP (je frémis d'avance devant le monde qui s'ouvre à moi tellement c'est bô), j'ai décidé de tenter de débrouiller un minimum de théorie des langages fonctionnels de ce que mon peu d'expérience en la matière a pu me fournir comme grain à moudre. J'ai donc suivi quelques liens et atterri sur ce PDF (au passage bien foutu et agréable à lire pour une initiation) sur Caml ; je connais déjà un peu le langage et ses subtilités, mais bon, un peu de rappel n'a jamais fait de mal à personne.
Or, quelle ne fut pas ma stupeur lorsque je suis tombé à la page 14 sur cette phrase anodine :
Soit j'ai mal compris la définition d'un langage strict, soit plusieurs choses se heurtent dans ma tête. En effet, il me semble (non, en fait j'en suis presque certain) que l'évaluation des conditions en Caml, qui ne sont que des expressions puisqu'on est fonctionnel, est justement paresseuse. Ce qui permet de faire des trucs du genre :
1 | if n = 0 && trololo then 42 else 42 / n;; |
(Oui je sais, c'est bidon, mais j'avais pas d'exemple pertinent en tête. Et la flemme d'en chercher un, aussi.)
Bref. Je comprends intuitivement pourquoi ça marche, là n'est pas le propos, mais du coup j'ai un peu de mal à fixer dans ma tête la définition de ces termes de strict et paresseux… Quelqu'un dans ces eaux troubles pourrait-il éclairer ma lanterne ? Merci d'avance et bon courage pour éclairer une lanterne sous la flotte.
Edit : en fait mon exemple est plus que bidon, il est raté… Mais je sais que l'évaluation des prédicats est paresseuse, si on fait machin && truc
et que machin est faux, alors truc ne sera pas testé… Bref, c'est le bordel dans mon cortex informatique. Please help!