ajout exception Lambda_termeError

This commit is contained in:
Éric Wegrzynowski 2021-01-29 17:49:30 +01:00
parent 83aa3a1406
commit b4b9bb8b22
1 changed files with 13 additions and 8 deletions

View File

@ -68,29 +68,34 @@ parser = Lambda_parser()
def _autre_variable(var, variables): 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 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 n = 0
while var + '{:d}'.format(n) in variables: while var + '{:d}'.format(n) in variables:
n += 1 n += 1
return var + '{:d}'.format(n) return var + '{:d}'.format(n)
class Lambda_termeError(Exception):
def __init__(self, msg):
self.message = msg
class Lambda_terme(): class Lambda_terme():
def __init__(self, categorie, *args): def __init__(self, categorie, *args):
if categorie not in (0, 1, 2): if categorie not in (0, 1, 2):
raise Exception('categorie non valide') raise Lambda_termeError('categorie non valide')
if categorie == 0: if categorie == 0:
if len(args) != 1 or not isinstance(args[0], str): 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: elif categorie == 1:
if (len(args) != 2 or if (len(args) != 2 or
not isinstance(args[0], str) or not isinstance(args[0], str) or
not isinstance(args[1], Lambda_terme)): not isinstance(args[1], Lambda_terme)):
raise Exception('mauvaise construction pour une abstraction') raise Lambda_termeError('mauvaise construction pour une abstraction')
else: else:
if (len(args) != 2 or if (len(args) != 2 or
not isinstance(args[0], Lambda_terme) or not isinstance(args[0], Lambda_terme) or
not isinstance(args[1], Lambda_terme)): 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) self._content = (categorie,) + tuple(args)
@staticmethod @staticmethod
@ -108,12 +113,12 @@ class Lambda_terme():
def applique(self, terme): def applique(self, terme):
if not isinstance(terme, Lambda_terme): if not isinstance(terme, Lambda_terme):
raise Exception('Application impossible') raise Lambda_termeError('Application impossible')
return Lambda_terme(2, self, terme) return Lambda_terme(2, self, terme)
def abstrait(self, var): def abstrait(self, var):
if not isinstance(var, str): if not isinstance(var, str):
raise Exception("Variable d'Abstraction invalide") raise Lambda_termeError("Variable d'Abstraction invalide")
return Lambda_terme(1, var, self) return Lambda_terme(1, var, self)
def est_redex(self): def est_redex(self):
@ -141,9 +146,9 @@ class Lambda_terme():
def subs(self, var, terme): def subs(self, var, terme):
if not isinstance(var, str): 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): 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 self.est_variable():
if var == self._content[1]: if var == self._content[1]:
return terme return terme