diff --git a/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts
index bb8564dd75451b505062219e1c2c11d37944ff4f..b3c58900e87e5049a98b23ecce0464bdabf08604 100755
--- a/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts	
@@ -36,6 +36,8 @@ export class Graph2DComponent {
 
     private id = 0;
 
+    private valores = [];
+
     private conjunto= [];
 
     // Animation state
@@ -80,22 +82,58 @@ export class Graph2DComponent {
                         var conjs = this.obtenerConjunto(jsonCanvas.funs[0]);
     
                         var d = conjs + "}"; //Leo
-    
                         var obj = JSON.parse(d);
+
                         //Para las funciones 
                         if (obj.conj.sets.fdom == "function(x)") {
                             var nom = jsonCanvas.funs[0].dom;
                             var elemento1 = this.recursionfuncion(jsonCanvas.funs[0].sets, nom);
-                            obj.conj.sets.fdom = function (x) { return eval(elemento1) }
+                            
+
+                            var funcionString = '';
+                            funcionString ="var "+nom+" = function(x){\nreturn "+elemento1+"}\n"
+
+                            funcionString += 'return ' + nom + '(x);\n'
+                            
+                            for (var funs of jsonCanvas.funs) {
+                                funcionString = 'var ' + funs.fun + ' = function('+funs.args+'){\n return ' + this.generarExpresion(funs.bdy) + '}\n' + funcionString;
+                            }
+                            funcionString = '(x)=>{\n' + funcionString + '}';
+                            console.log(funcionString)
+                            obj.conj.sets.fdom = eval(funcionString);
+
+
+
+
+
+
+
+
                         }
                         if (obj.conj.sets.fcod == "function(x)") {
                             var nom = jsonCanvas.funs[0].cod;
                             var elemento2 = this.recursionfuncion(jsonCanvas.funs[0].sets, nom);
                             obj.conj.sets.fcod = function (x) { return (eval(elemento2)) }
+
+                            var funcionString = '';
+                            funcionString ="var "+nom+" = function(x){\nreturn "+elemento2+"}\n"
+
+                            funcionString += 'return ' + nom + '(x);\n'
+                            
+                            for (var funs of jsonCanvas.funs) {
+                                funcionString = 'var ' + funs.fun + ' = function('+funs.args+'){\n return ' + this.generarExpresion(funs.bdy) + '}\n' + funcionString;
+                            }
+                            funcionString = '(x)=>{\n' + funcionString + '}';
+
+                            obj.conj.sets.fdom = eval(funcionString);
+
+
                         }
 
                         var funcionGenerada = this.generarFuncion(jsonCanvas);
-                        console.log(obj)
+                    
+ 
+
 
                         //para Enumerados
                         if (obj.conj.dom == 'Numer') {
@@ -116,9 +154,11 @@ export class Graph2DComponent {
 
                         }
 
+                        
+                        
                         let fun = eval(funcionGenerada);
 
-                        var colores = ['pink', 'red', 'blue', 'orange', 'green']
+                        var colores = ['violet', 'red', 'blue', 'orange', 'green','black','']
                         var num = this.getRandomArbitrary(0, 4);
                         var color = colores[num];
     
@@ -135,18 +175,78 @@ export class Graph2DComponent {
                                 this.conjunto.push(obj.conj);
                                 this.id = 0;
                                 this.funciones = [];
-                                this.funciones.push({
-                                    id: this.funciones.length,
-                                    sampler: 'builtIn',
-                                    fn: function(scope) {
-                                      return fun(scope.x)
-                                    },
-                                    graphType: tipoGraf,
-                                    color: color
-                                })
+                                if(obj.conj.baseDom == 'R'){
+                                    this.valores = [];
+                                    var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas);
+                                    
+                                    var funcionesVer2019 =  this.createListFunction(jsonCanvas);
+                                    var listValores = [];
+                                    for (var k of this.valores){
+                                    listValores.push(parseInt(k))
+                                    }   
+                                    for (var i of this.valores){
+                                    for(var t of this.valores){
+                                        var aux = parseInt(t);
+                                        var aux2 = parseInt(i);
+                                        var mul = aux * aux2;
+                                        listValores.push(mul)
+                                        }
+                                    }
+                                    for (i = -999; i < 1000; i++) {                                      
+                                        listValores.push(i)
+                                    }
+                                    let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual);
+
+                                    for (var fun2 of funcionesVer2019){
+                                        let fun3 = eval(fun2);
+                                        var insertar = false;
+                                        var punto1 = [];
+
+                                        if (sinRepetidos.length){
+                                            for (var p of sinRepetidos){
+                                                var pn= parseInt(p) - 0.001
+                                                var pp= parseInt(p) + 0.001
+                                                insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar)
+                                                if((fun3(pp) != undefined)){
+                                                    punto1.push(pp);
+                                                }else if ((fun3(pn) != undefined)){
+                                                    punto1.push(p);
+                                                }
+                                            }
+                                        }else{
+                                            insertar = true;
+                                        }
+                                        if (insertar){
+                                            this.funciones.push({
+                                                id: 0,
+                                                sampler: 'builtIn',
+                                                fn: function(scope) {
+                                                return fun3(scope.x)
+                                                },
+                                                graphType: tipoGraf,
+                                                point:punto1[0],
+                                                color: color,
+                                                
+                                            });
+                                        }
+                                    } 
+                                }else{
+       
+                                        this.funciones.push({
+                                            id: this.funciones.length,
+                                            sampler: 'builtIn',
+                                            fn: function(scope) {
+                                            return fun(scope.x)
+                                            },
+                                            graphType: tipoGraf,
+                                            color: color
+                                        })
+                                } 
+                                     
                             }else{
                                 if(this.conjunto.length == 1){
                                     this.id = 1;
+                              
                                     this.conjunto.unshift({radio: 2, dom:this.conjunto[0].baseDom, cod:this.conjunto[0].baseCod, baseCod:this.conjunto[0].baseCod, baseDom:this.conjunto[0].baseDom, sets:{fdom:this.conjunto[0].baseDom,fcod:this.conjunto[0].baseCod}});
                                     this.funciones[0].id = this.id;
                                     
@@ -164,9 +264,144 @@ export class Graph2DComponent {
                                     }
                                 }    
                                 this.conjunto.push(obj.conj);
+                                var identificador=0;
+                                    if (this.conjunto.length > 1){
+                                        identificador=this.conjunto.length - 2 + this.id;
+                                    }
+                                if(obj.conj.baseDom == 'R'){
+                                   this.valores = [];
+                                   var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas);
+
+                                   var funcionesVer2019 =  this.createListFunction(jsonCanvas);
+                                   var listValores = [];
+                                   for (var k of this.valores){
+                                      listValores.push(parseInt(k))
+                                   }   
+                                   for (var i of this.valores){
+                                      for(var t of this.valores){
+                                         var aux = parseInt(t);
+                                         var aux2 = parseInt(i);
+                                         var mul = aux * aux2;
+                                         listValores.push(mul)
+                                       }
+                                    }
+                                    for (i = -999; i < 1000; i++) {                                      
+                                        listValores.push(i)
+                                    }
+                                    let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual);
+
+                                    for (var fun2 of funcionesVer2019){
+                                        let fun3 = eval(fun2);
+                                        var insertar = false;
+                                        var punto1 = [];
+
+                                        if (sinRepetidos.length){
+                                            for (var p of sinRepetidos){
+                                                var pn= parseInt(p) - 0.001
+                                                var pp= parseInt(p) + 0.001
+                                                insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar)
+                                                if((fun3(pp) != undefined)){
+                                                    punto1.push(pp);
+                                                }else if ((fun3(pn) != undefined)){
+                                                    punto1.push(p);
+                                                }
+                                            }
+                                        }else{
+                                            insertar = true;
+                                        }
+                                        if (insertar){
+                                            this.funciones.push({
+                                                id: identificador,
+                                                sampler: 'builtIn',
+                                                fn: function(scope) {
+                                                return fun3(scope.x)
+                                                },
+                                                graphType: tipoGraf,
+                                                point:punto1[0],
+                                                color: color,
+                                               
+                                            });
+                                        }
+                                    } 
+                                }else{
+                                    this.funciones.push({
+                                        id: identificador,
+                                        sampler: 'builtIn',
+                                        fn: function(scope) {
+                                        return fun(scope.x)
+                                        },
+                                        graphType: tipoGraf,
+                                        color: color
+                                    });
+                                }
+                                
+                            }        
+                        }else{ 
+                            
+                            this.conjunto = [];
+                            this.conjunto.push(obj.conj);
+                            this.id = 0;
+                            this.funciones = [];
+                            if(obj.conj.baseDom == 'R'){
+                                this.valores = [];
+                                var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas);
+                                var funcionesVer2019 =  this.createListFunction(jsonCanvas);
+                                var listValores = [];
+                                for (var k of this.valores){
+                                   listValores.push(parseInt(k))
+                                }
+                                for (var i of this.valores){
+                                   for(var t of this.valores){
+                                      var aux = parseInt(t);
+                                      var aux2 = parseInt(i);
+                                      var mul = aux * aux2;
+                                      listValores.push(mul)
+                                    }
+                                 }
+                                 for (i = -999; i < 1000; i++) {                                      
+                                     listValores.push(i)
+                                 }
+                                 let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual);
+
+                                 for (var fun2 of funcionesVer2019){
+                                     let fun3 = eval(fun2);
+                                     var insertar = false;
+                                     var punto1 = [];
+
+                                     if (sinRepetidos.length){
+                                         for (var p of sinRepetidos){
+                                             var pn= parseInt(p) - 0.001
+                                             var pp= parseInt(p) + 0.001
+                                             insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar)
+                                             if((fun3(pp) != undefined)){
+                                                 punto1.push(pp);
+                                             }else if ((fun3(pn) != undefined)){
+                                                 punto1.push(p);
+                                             }
+                                         }
+                                     }else{
+                                         insertar = true;
+                                     }
+                                     if (insertar){
+                                         this.funciones.push({
+                                             id: 0,
+                                             sampler: 'builtIn',
+                                             fn: function(scope) {
+                                             return fun3(scope.x)
+                                             },
+                                             graphType: tipoGraf,
+                                             point:punto1[0],
+                                             color: color,
+                                            
+                                         });
+
+                                     }
+                                  
+                                 } 
 
+                            }else{
                                 this.funciones.push({
-                                    id: this.funciones.length + this.id,
+                                    id: this.funciones.length,
                                     sampler: 'builtIn',
                                     fn: function(scope) {
                                     return fun(scope.x)
@@ -174,21 +409,8 @@ export class Graph2DComponent {
                                     graphType: tipoGraf,
                                     color: color
                                 });
-                            }        
-                        }else{ 
-                            this.conjunto = [];
-                            this.conjunto.push(obj.conj);
-                            this.id = 0;
-                            this.funciones = [];
-                            this.funciones.push({
-                                id: this.funciones.length,
-                                sampler: 'builtIn',
-                                fn: function(scope) {
-                                  return fun(scope.x)
-                                },
-                                graphType: tipoGraf,
-                                color: color
-                            });
+
+                            }
                         }
                         let bounding = this.getBounding();
                         this.instance = functionPlot({
@@ -747,9 +969,501 @@ export class Graph2DComponent {
         return expresion;
     }
 
-    //Nuevo 20-07-2018
 
 
+// nueva
+createListFunction = function (graph) {
+    var funcionString = '';
+    var grafica;
+    var funciones = [];
+    var j = 0;
+    while (graph.funs[j].fun != graph.graph) {
+        j += 1;
+    }
+
+    var fun1 = graph.funs[j];
+    var arrayFunction = [];
+    var nameFun = [];
+    nameFun.push(fun1.fun);
+    funciones = this.armarFuncion(fun1.bdy,graph,nameFun);
+
+    for (var funs of funciones){
+        for (var fun of graph.funs){
+            if (fun.fun != fun1.fun){
+                funcionString = 'var ' + fun.fun + ' = function(' + fun.args.join() + '){\n return ' + this.generarExpresion(fun.bdy) + '}\n' + funcionString;
+            }
+        }
+        funcionString = 'var ' + fun1.fun + ' = function(' + fun1.args.join() + '){\n return ' + funs + '}\n' + funcionString;
+
+        funcionString += ';return ' + fun1.fun + '(' + fun1.args.join() + ');\n'
+        grafica = fun1;
+        funcionString = '(' + grafica.args.join() + ')=>{\n' + funcionString + '}';
+        arrayFunction.push(funcionString);   
+        var funcionString = '';
+    }
+    return arrayFunction;
+}
+
+armarFuncion = function (exp,graph,nameFun){
+    var lisArm = this.generateFunctionAndExp(exp,graph,nameFun);
+    var lisFun = [];
+    for(var lis of lisArm){
+        var aux = '';
+        if(lis[0] == 'N'){
+            aux = lis[1];
+        }else{
+            aux = '('+lis[0]+' ? '+lis[1]+' : undefined )';
+        }
+        lisFun.push(aux);
+    }
+    return lisFun
+}
+
+
+generateFunctionAndExp = function (exp,graph,namefun6) {
+    var myList = [];
+    // devuelvo lista con tupla (cond,funcion)
+    if (exp.kind == 'cnd') {
+        var lisA = this.generateFunctionAndExp(exp.exp1,graph,namefun6);
+        var lisB = this.generateFunctionAndExp(exp.exp2,graph,namefun6);
+        var cond = this.createListExp(exp.cond);
+        var g = this.createListExp(exp.cond);
+        var aux121 = [];
+        var cond2 = g.splice(1);
+        var union = g[0]
+
+
+        for(var a of cond2){
+            union = '('+union+' && '+a+')';
+        }
+        for (var fun1 of lisA){
+            if(fun1[0] == 'N'){
+                if(cond.length == 0){
+                    aux121[0]='N';
+                }else{
+                    aux121[0]=union;
+                }
+            }else{ 
+                aux121[0]= '('+fun1[0]+' && '+union+ ')';
+            }
+            aux121[1] = fun1[1];
+            myList.push(aux121);
+        }
+        for (var fun2 of lisB){
+            if(cond.length != 0){
+                for (var condi of cond){
+                    var aux123 = [];
+                    aux123[1]=fun2[1];
+                    if(fun2[0] == 'N'){
+                            aux123[0]='!('+condi+')';
+                    }else{
+                        aux123[0] = '('+fun2[0]+' && !('+condi+'))';
+                    }
+                    myList.push(aux123);
+                }
+            }else{
+                myList.push(fun2);
+            }
+        }
+        
+    } else if (exp.kind == 'bop') {
+        
+        if (exp.op == '^') {
+            var lisA1 = this.generateFunctionAndExp(exp.exp1,graph,namefun6);
+            var lisB1 = this.generateFunctionAndExp(exp.exp2,graph,namefun6);
+            var aux1 = [];
+            for (var f1 of lisA1){
+                for (var f2 of lisB1){
+                    var aux11 = 'Math.pow('+f1[1]+' , '+f2[1]+')';
+                    var aux21;
+                    if ((f2[0] == 'N') && (f1[0] == 'N')){
+                        aux21 = 'N'
+                    }else if(f2[0] == 'N'){
+                        aux21=f1[0]
+                    }else if(f1[0] == 'N'){
+                        aux21=f2[0]
+                    }else{
+                        aux21= '('+f1[0]+' && '+f2[0]+')';
+                    }
+                    aux1[0]= aux21;
+                    aux1[1] = aux11;
+                    myList.push(aux1);
+                }
+            }
+        } else {
+
+            var lisA2 = this.generateFunctionAndExp(exp.exp1,graph,namefun6);
+            var lisB2 = this.generateFunctionAndExp(exp.exp2,graph,namefun6);
+            var aux2 = [];
+            for (var f1 of lisA2){
+                for (var f2 of lisB2){
+                    var aux12 = '(('+f1[1]+')'+exp.op+'('+f2[1]+'))';
+                    var aux22
+                    if ((f2[0] == 'N') && (f1[0] == 'N')){
+                        aux22 = 'N'
+                    }else if (f2[0] == 'N'){
+                        aux22 =f1[0]
+                    }else if (f1[0] == 'N'){
+                        aux22 =f2[0]
+                    }else{ 
+                        aux22= '('+f1[0]+' && '+f2[0]+')';
+                    }
+                    aux2[0]= aux22;
+                    aux2[1] = aux12;
+                    myList.push(aux2);
+
+                }
+            }
+        }
+    } else if (exp.kind == 'uop') {
+        var lisA3 = this.generateFunctionAndExp(exp.exp,graph,namefun6);
+        var aux3 = [];
+        for (var f1 of lisA3){
+                var aux13 = ' '+exp.op+' '+f1[1]+' ';               
+                aux3[0]= f1[0];
+                aux3[1] = aux13;
+                myList.push(aux3);   
+        }
+    } else if (exp.kind == 'app') {       
+        if ((exp.fun == 'Math.cos') || (exp.fun == 'cos')) {
+            var aux4 = [];
+            var aux14 = 'Math.cos('+ exp.args.map(e => this.generarExpresion(e)).join() +')';
+            var aux24 = 'N'
+            aux4[0]= aux24;
+            aux4[1] = aux14;
+            myList.push(aux4);           
+        } else if ((exp.fun == 'Math.sin') || (exp.fun == 'sin')) {
+            var aux5 = [];
+            var aux15 = 'Math.sin('+ exp.args.map(e => this.generarExpresion(e)).join() +')';
+            var aux25 = 'N'
+            aux5[0]= aux25;
+            aux5[1] = aux15;
+            myList.push(aux5);
+        } else if ((exp.fun == 'Math.round') || (exp.fun == 'round')){
+            var aux6 = [];
+            var aux16 = 'Math.round('+ exp.args.map(e => this.generarExpresion(e)).join() +')';
+            var aux26 = 'N'
+            aux6[0]= aux26;
+            aux6[1] = aux16;
+            myList.push(aux6);
+        }else{
+            if(!namefun6.includes(exp.fun)){
+                var ListnameFNew = namefun6;
+                ListnameFNew.push(exp.fun);
+                for (var fun5 of graph.funs){
+                    if(fun5.fun == exp.fun){
+                         myList = this.generateFunctionAndExp(fun5.bdy,graph,ListnameFNew);
+                    }
+                }
+            }else{
+                var aux76 = [];
+                aux76[0] = 'N';
+                aux76[1] = exp.fun;
+                myList.push(aux76);
+            }
+        }
+        
+    } else if (exp.kind == 'tup') {
+        var lisA7 = this.generateFunctionAndExp(exp.exps,graph,namefun6);
+        for (var f of lisA7){
+            var aux65 = [];
+            aux65[1] = '('+f[1]+')';
+            aux65[0] = f[0];
+            myList.push(aux65);
+        }
+       //Es esto o las combinaciones
+       // expresion = ' (' + exp.exps.map(e => this.generarExpresion(e)).join() + ') ';
+    } else if (exp.kind == 'lit') {
+        var aux8 = [];
+        aux8[0] = 'N';
+        aux8[1] = ' ' + exp.val + ' ';
+        myList.push(aux8);
+    } else if (exp.kind == 'var') {
+
+        var aux9 = [];
+        aux9[0] = 'N';
+        aux9[1] = ' ' + exp.var + ' ';
+        myList.push(aux9);
+    } else {
+        var aux54 = [];
+        aux54[0]= 'N';
+        aux54[1]='undefined';
+        myList.push(aux54);
+    }
+
+    return myList;
+}
+
+/////////////////////
+
+createListExp = function (exp) {
+    var expresion = '';
+    var funcione = [];
+    if (exp.kind == 'cnd') {
+            funcione = this.createListExp(exp.cond);
+    } else if (exp.kind == 'bop') {
+        if (exp.op == '==') {
+            expresion = ' Math.abs((' + this.createListExp(exp.exp1)[0] + ') - (' + this.createListExp(exp.exp2)[0] + ')) == 0 ';
+            if(exp.exp1.kind == 'lit'){
+                this.valores.push(exp.exp1.val)
+            }
+            if(exp.exp2.kind == 'lit'){
+                this.valores.push(exp.exp2.val)
+            }
+            funcione.push(expresion)
+
+        } else if (exp.op == '/=') {
+            expresion = ' Math.abs((' + this.createListExp(exp.exp1) + ') - (' + this.createListExp(exp.exp2) + ')) != 0';
+            funcione.push(expresion)
+
+        } else if (exp.op == '^') {
+            expresion = ' Math.pow(' + this.createListExp(exp.exp1) + ',' + this.createListExp(exp.exp2) + ') ';
+            funcione.push(expresion)
+
+        } else if (exp.op == '&&'){
+            
+            for (var atr of this.createListExp(exp.exp1)){
+                funcione.push(atr)
+            }
+            for (var atr2 of this.createListExp(exp.exp2)){
+                funcione.push(atr2)
+            }
+        }else if (exp.op == 'or'){
+            funcione.push('!'+this.createListExp(exp.exp1))
+            funcione.push('!'+this.createListExp(exp.exp2))
+        }else{
+            var lis1 = this.createListExp(exp.exp1)
+            var lis2 = this.createListExp(exp.exp2)
+            for(var expes1 of lis1){
+                for (var expes2 of lis2){
+                    expresion = ' ((' + expes1 + ')' + exp.op + '(' + expes2 + ') )';
+                    funcione.push(expresion)
+                }
+            }
+        }
+    } else if (exp.kind == 'uop') {
+        expresion = ' ' + exp.op + ' ' + this.createListExp(exp.exp) + ' ';
+        funcione.push(expresion)
+
+    } else if (exp.kind == 'app') {
+
+        if (exp.fun == 'Math.cos') {
+            exp.fun = 'Math.cos'
+            expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') ';
+            funcione.push(expresion)
+
+        } else if (exp.fun == 'Math.sin') {
+            exp.fun = 'Math.sin'
+            expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') ';
+            funcione.push(expresion)
+
+        } else if (exp.fun == 'Math.round') {
+            exp.fun = 'Math.round'
+            expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') ';
+            funcione.push(expresion)
+
+        }else{
+            expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') ';
+            funcione.push(expresion)
+        }
+
+    } else if (exp.kind == 'tup') {
+        expresion = ' (' + exp.exps.map(e => this.generarExpresion(e)).join() + ') ';
+        funcione.push(expresion)
+
+    } else if (exp.kind == 'lit') {
+        expresion = ' ' + exp.val + ' ';
+        this.valores.push(exp.val)
+        funcione.push(expresion)
+
+    } else if (exp.kind == 'var') {
+
+        expresion = ' ' + exp.var + ' ';
+        funcione.push(expresion)
+
+    } else {
+        expresion = 'undefined ';
+        funcione.push(expresion)
+
+    }
+    return funcione;
+}
+///////////////////// fin de nuevo
+
+
+     // Prueba 2019
+     generarFuncionDisc = function (graph) {
+        var funcionString = '';
+        var grafica;
+        var arrayFunction = [];
+        var fun = graph.funs[0];
+        var ListnameF = [];
+        ListnameF.push(fun.fun);
+        var funciones = this.generarExpresionDisc(fun.bdy,graph,ListnameF)
+        for (var funs of funciones){
+            funcionString = 'var ' + fun.fun + ' = function(' + fun.args.join() + '){\n return ' + funs + '}\n' + funcionString;
+
+            if (fun.fun == graph.graph) {
+                funcionString += ';return ' + fun.fun + '(' + fun.args.join() + ');\n'
+                grafica = fun;
+            }
+            funcionString = '(' + grafica.args.join() + ')=>{\n' + funcionString + '}';
+            arrayFunction.push(funcionString);
+            var funcionString = '';
+        }
+
+
+        var arrayFunction1 = [arrayFunction[0]]
+        return arrayFunction;
+    }
+
+    generarExpresionDisc = function (exp,grap,ListnameF) {
+        var expresion = '';
+        var funcione = [];
+        if (exp.kind == 'cnd') {
+
+                var con1 = this.generarExpresionDisc(exp.cond,grap,ListnameF);
+                var con11 = '';
+                
+                for (var condi of con1){
+                    if (con11 == ''){
+                        con11 = condi;
+                    }else{
+                        con11 = '('+con11 +' && '+ condi +')';
+                    }
+                    
+                }
+                for (var funs of this.generarExpresionDisc(exp.exp1,grap,ListnameF)){ 
+                    funcione.push('('+con11+' ? '+ funs +' : undefined)');      
+                }
+                for (var funs2 of this.generarExpresionDisc(exp.exp2,grap,ListnameF)){ 
+                    for (var condi2 of con1){
+                        funcione.push('(!('+condi2+') ? '+ funs2 +' : undefined)');
+
+                    }   
+                }
+            
+            
+           
+        } else if (exp.kind == 'bop') {
+            if (exp.op == '==') {
+                expresion = ' Math.abs((' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ') - (' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ')) == 0 ';
+                if(exp.exp1.kind == 'lit'){
+                    this.valores.push(exp.exp1.val)
+                }
+                if(exp.exp2.kind == 'lit'){
+                    this.valores.push(exp.exp2.val)
+                }
+                funcione.push(expresion)
+
+            } else if (exp.op == '/=') {
+                expresion = ' Math.abs((' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ') - (' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ')) != 0';
+                funcione.push(expresion)
+
+            } else if (exp.op == '^') {
+                expresion = ' Math.pow(' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ',' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ') ';
+                funcione.push(expresion)
+
+            } else if (exp.op == '&&'){
+                
+                for (var atr of this.generarExpresionDisc(exp.exp1,grap,ListnameF)){
+                    funcione.push(atr)
+                }
+                for (var atr2 of this.generarExpresionDisc(exp.exp2,grap,ListnameF)){
+                    funcione.push(atr2)
+                }
+            }else if (exp.op == 'or'){
+                funcione.push('!'+this.generarExpresionDisc(exp.exp1,grap,ListnameF))
+                funcione.push('!'+this.generarExpresionDisc(exp.exp2,grap,ListnameF))
+            }else{
+                var lis1 = this.generarExpresionDisc(exp.exp1,grap,ListnameF)
+                var lis2 = this.generarExpresionDisc(exp.exp2,grap,ListnameF)
+                for(var expes1 of lis1){
+                    for (var expes2 of lis2){
+                        expresion = ' ((' + expes1 + ')' + exp.op + '(' + expes2 + ') )';
+                        funcione.push(expresion)
+                    }
+                }
+
+
+            }
+        } else if (exp.kind == 'uop') {
+            expresion = ' ' + exp.op + ' ' + this.generarExpresionDisc(exp.exp,grap,ListnameF) + ' ';
+            funcione.push(expresion)
+
+        } else if (exp.kind == 'app') {
+
+			if (exp.fun == 'Math.cos') {
+                exp.fun = 'Math.cos'
+                expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') ';
+                funcione.push(expresion)
+
+			} else if (exp.fun == 'Math.sin') {
+                exp.fun = 'Math.sin'
+                expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') ';
+                funcione.push(expresion)
+
+			} else if (exp.fun == 'Math.round') {
+                exp.fun = 'Math.round'
+                expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') ';
+                funcione.push(expresion)
+
+			}else{
+
+                if(!ListnameF.includes(exp.fun)){
+
+                    var ListnameFNew = ListnameF;
+                    ListnameFNew.push(exp.fun);
+                    for (var fun5 of grap.funs){
+
+                        if(fun5.fun == exp.fun){
+
+                            var funresul = this.generarExpresionDisc(fun5.bdy,grap,ListnameFNew);
+                            for (var subfunciones of funresul){
+                                funcione.push(subfunciones);
+                            }
+                            
+                        }
+                    }
+                }else{
+                    funcione.push(exp.fun);
+                }
+                
+            }
+
+        } else if (exp.kind == 'tup') {
+            expresion = ' (' + exp.exps.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') ';
+            funcione.push(expresion)
+
+        } else if (exp.kind == 'lit') {
+            expresion = ' ' + exp.val + ' ';
+            this.valores.push(exp.val)
+            funcione.push(expresion)
+
+        } else if (exp.kind == 'var') {
+
+            expresion = ' ' + exp.var + ' ';
+            funcione.push(expresion)
+
+        } else {
+            expresion = ' undefined ';
+            funcione.push(expresion)
+
+        }
+        return funcione;
+    }
+
+
+     //Prueba 2019 fin
+
+
+
+
+
+
+    //Nuevo 20-07-2018
+    
+
     obtenerConjunto = function (grf) {
 
         var setf = '\"sets\": {';
@@ -786,9 +1500,9 @@ export class Graph2DComponent {
         } else if (grf.cod == 'Z') {
             dominio += "\"baseCod\": \"Z\", \"cod\": \"Z\" ,";
             setf += "\"fcod\": \"Z\"";
-       // } else if (grf.cod == 'N') {
-       //     dominio += "\"baseCod\": \"N\", \"cod\": \"N\" ,";
-       //     setf += "\"fcod\": \"N\"";
+        } else if (grf.cod == 'N') {
+            dominio += "\"baseCod\": \"N\", \"cod\": \"N\" ,";
+            setf += "\"fcod\": \"N\"";
         } else {
             var nom = grf.cod;
             if (Array.isArray(grf.sets[0][nom])) {
@@ -807,12 +1521,19 @@ export class Graph2DComponent {
         return dominio + setf + "}}";
     }
 
+
+
+
+
     recursionfuncion = function (func, nombre) {
         var fun = func[0][nombre].set;
         var resul = "";
         if (fun == 'R' || fun == 'Z' || fun == 'N') {
+
             resul += this.generarF(func[0][nombre].cond);
+
         } else {
+
             resul += this.generarF(func[0][nombre].cond) + " && " + this.recursionfuncion(func, fun);
 
         }
@@ -825,8 +1546,8 @@ export class Graph2DComponent {
             domin += "\"radio\": 0.3, \"baseDom\": \"R\", \"dom\": \"Func\"";
         } else if (sets[0][nom].set == 'Z') {
             domin += "\"radio\": 2, \"baseDom\": \"Z\", \"dom\": \"Func\"";
-      //  } else if (sets[0][nom].set == 'N') {
-      //      domin += "\"radio\": 2, \"baseDom\": \"N\", \"dom\": \"Func\"";
+        } else if (sets[0][nom].set == 'N') {
+            domin += "\"radio\": 2, \"baseDom\": \"N\", \"dom\": \"Func\"";
         } else {
             var nombre = sets[0][nom].set;
             domin = this.recursivoDom(sets, nombre);
@@ -841,8 +1562,8 @@ export class Graph2DComponent {
             coodo += "\"baseCod\": \"R\", \"cod\": \"Func\",";
         } else if (sets[0][nom].set == 'Z') {
             coodo += "\"baseCod\": \"Z\", \"cod\": \"Func\",";
-       // } else if (sets[0][nom].set == 'N') {
-       //     coodo += "\"baseCod\": \"N\", \"cod\": \"Func\",";
+        } else if (sets[0][nom].set == 'N') {
+            coodo += "\"baseCod\": \"N\", \"cod\": \"Func\",";
         } else {
             var nombre = sets[0][nom].set;
             coodo += this.recursivoDom(sets, nombre);
@@ -858,7 +1579,7 @@ export class Graph2DComponent {
             if (exp.op == '==') {
                 expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) == 0 ';
             } else if (exp.op == '/=') {
-                expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) != 0';
+                expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) != 0 ';
             } else if (exp.op == '^') {
                 expresion = ' Math.pow(' + this.generarF(exp.exp1) + ',' + this.generarF(exp.exp2) + ') ';
             } else {