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):
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user