Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

123
Vistas
Curry booleano Javascript

Estoy tratando de escribir una función de curry booleana en javascript.

 let s = "ajkjxa"; function isPresent(a) { return function (b) { if (b) { return isPresent(s.includes(b) && s.includes(a)); } else { return s.includes(a); } }; } console.log(isPresent("a")("j")("x")());//true expected console.log(isPresent("a")("j")("x")('b')());//false expected

Quiero que la función isPresent devuelva verdadero si los argumentos pasados presentes son la cadena dada; de lo contrario, debería devolver falso.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Una solución genérica es pasar el valor del "acumulador" de manera diferente. La primera llamada que haga a isPresent ya debería llamar al cierre, e isPresent() también debería funcionar.

 function makePresenceChecker(string, found) { return function(char) { if (char == undefined) return found; else return makePresenceChecker(string, found && string.includes(char)); }; } const isPresent = makePresenceChecker("ajkjxa", true); console.log(isPresent("a")("j")("x")()); // true console.log(isPresent("a")("j")("x")('b')()); // false

También puedes escribir eso con un IIFE:

 const string = "ajkjxa"; const isPresent = (function makePresenceChecker(found) { return function(char) { if (char == undefined) return found; else return makePresenceChecker(found && string.includes(char)); }; })(true); console.log(isPresent("a")("j")("x")()); // true console.log(isPresent("a")("j")("x")('b')()); // false

about 4 years ago · Juan Pablo Isaza Denunciar

0

Principalmente respondo esto como un ejercicio de aprendizaje. Después de mucho luchar, tengo algo que sé que funciona. He usado una sintaxis y nombres diferentes a los de su ejemplo inicial, y paso la cadena inicial en una llamada de configuración.

Es posible que esto no sea estrictamente "curring", ya que solo necesitamos agregar los valores booleanos. No parecía necesario compilar una lista de llamadas a funciones ya que los resultados booleanos son suficientes.

Como se menciona en los comentarios, devolver una función al final no es necesario al menos en JS puro. En TypeScript en el que escribí esto, no puedo hacer que el tipo funcione de esta manera. (El tipo de devolución depende del tipo de argumento, y no puede llamar a una (boolean | function) si eso es lo que se devuelve).

 const startcurry = start => { // string const results = []; // boolean[] (could be boolean instead) function inner(maybeNext) { // string? if (maybeNext) { const next = maybeNext; // string (just for naming rule) results.push(start.includes(next)); return inner; } return results.every(x => x); } return inner; }; const s = "ajkjxa"; console.log(startcurry(s)("a")("j")("x")()); // true expected console.log(startcurry(s)("a")("j")("x")('b')()); // false expected console.log(startcurry(s)("a")("j")("x")('k')()); // true expected console.log(startcurry(s)("a")("j")("x")('k')('c')()); // false expected console.log(startcurry(s)()); // true expected console.log(startcurry(s)("b")("a")()); // false expected

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente puede cambiarlo para que verifique 'a' cada vez pero llame a isPresent (b) recursivamente, si existe

 let s = "ajkjxa"; function isPresent(a, valid=true) { return function (b) { let isValid = valid && s.includes(a); if (b) return isPresent(b, isValid) return isValid }; } console.log(isPresent("a")("j")("x")());//true expected console.log(isPresent("a")("j")("x")('b')());//false expected console.log(isPresent("a")("g")("l")());//false expected console.log(isPresent("a")("s")("b")("b")());//false expected console.log(isPresent("a")("s")("l")("a")());//false expected

EDITAR: se movió a parámetros predeterminados, menos código y funciona para los casos de uso en el comentario.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda