diff --git a/lambda_calcul.py b/lambda_calcul.py index b4e285e..0cfe65f 100644 --- a/lambda_calcul.py +++ b/lambda_calcul.py @@ -68,29 +68,34 @@ parser = Lambda_parser() def _autre_variable(var, variables): ''' renvoie var concaténé avec le premier numéro de sorte que le résultat ne soit pas dans variables + fonction utile pour les substitutions de termes ''' n = 0 while var + '{:d}'.format(n) in variables: n += 1 return var + '{:d}'.format(n) +class Lambda_termeError(Exception): + def __init__(self, msg): + self.message = msg + class Lambda_terme(): def __init__(self, categorie, *args): if categorie not in (0, 1, 2): - raise Exception('categorie non valide') + raise Lambda_termeError('categorie non valide') if categorie == 0: if len(args) != 1 or not isinstance(args[0], str): - raise Exception('mauvaise construction pour une variable') + raise Lambda_termeError('mauvaise construction pour une variable') elif categorie == 1: if (len(args) != 2 or not isinstance(args[0], str) or not isinstance(args[1], Lambda_terme)): - raise Exception('mauvaise construction pour une abstraction') + raise Lambda_termeError('mauvaise construction pour une abstraction') else: if (len(args) != 2 or not isinstance(args[0], Lambda_terme) or not isinstance(args[1], Lambda_terme)): - raise Exception('mauvaise construction pour une application') + raise Lambda_termeError('mauvaise construction pour une application') self._content = (categorie,) + tuple(args) @staticmethod @@ -108,12 +113,12 @@ class Lambda_terme(): def applique(self, terme): if not isinstance(terme, Lambda_terme): - raise Exception('Application impossible') + raise Lambda_termeError('Application impossible') return Lambda_terme(2, self, terme) def abstrait(self, var): if not isinstance(var, str): - raise Exception("Variable d'Abstraction invalide") + raise Lambda_termeError("Variable d'Abstraction invalide") return Lambda_terme(1, var, self) def est_redex(self): @@ -141,9 +146,9 @@ class Lambda_terme(): def subs(self, var, terme): if not isinstance(var, str): - raise Exception('subst possible uniquement pour les variables') + raise Lambda_termeError('subst possible uniquement pour les variables') if not isinstance(terme, Lambda_terme): - raise Exception('subst possible uniquement sur un lambda-terme') + raise Lambda_termeError('subst possible uniquement sur un lambda-terme') if self.est_variable(): if var == self._content[1]: return terme