ajout exception Lambda_termeError
This commit is contained in:
parent
83aa3a1406
commit
b4b9bb8b22
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user