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):
'''
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