Études-translate/"this" et reconnaissance des dictionnaires

From Lazi wiki
Jump to: navigation, search

Question

L'expression
$F this -> recurse $F $D[a,b] -> $D[ a = this, b = f a ]
est actuellement mal reconnue car le dictionnaire n'utilise pas de référence au dictionnaire entier, on lui attribue alors le nom "this", mais comme il est utilisé on a une collision de variable.

D'autre part, pour le cas suivant :
$F c -> recurse $F $D[a,b] -> $D[ a = this, b = f a c ]
on a le même problème mais avec un nom de clé.

Comment éviter ce bug ?

Étude

En mettant toutes les informations dans Dict

L'idée est de refléter exactement dans Dict l'expression Lazi traduite.

Mais il faudrait alors que ces informations soient aussi fournies dans la notation "$D[]".

En ne reconnaissant pas l'expression en cas de conflit

On peut détecter les rares (?) cas de conflit et dans ce cas ne pas reconnaître le dictionnaire.

Pourquoi rare: dans le code source, on utilise la notation dictionnaire ($D[]) pour exprimer un dictionnaire. Hors cette notation fourni les variables correspondant aux clé plus celle correspondant au dictionnaire entier. On ne peut donc pas faire référence à des variables ayant ces noms et venant de l'extérieur. Donc la seule manière serait d'écrire les expressions comme dans la question.

Facilité de détection des collisions : il faut vérifier que les variables manquantes dans la varexp sont inutilisées dans l'expression.

Réponse

Il faut détecter les conflits et ne pas reconnaître l'expression dans ce cas. Voir l'étude.