RACK_ENV=development bundle exec rackup -p 4567
mumuki / mumuki-prolog-runner Goto Github PK
View Code? Open in Web Editor NEWSinatra server for running PLUnit tests within Mumuki
Home Page: http://mumuki.io
License: MIT License
Sinatra server for running PLUnit tests within Mumuki
Home Page: http://mumuki.io
License: MIT License
Ejemplo:
maximo(Numero, Otro, Maximo):-Numero>= Otro, Maximo is Numero.
maximo(Numero, Otro, Maximo):- Numero < Otro, Maximo is Otro.
Para mi el is en estos casos es algo que quiero evitar.
Prolog code usually contains '%'. But it is being interpreted as a %-encoding:
2015-03-25T03:54:29.890957+00:00 app[web.1]: [2015-03-25 03:54:29] ERROR Rack::Utils::InvalidParameterError: invalid %-encoding ({"test":"puedeAndar(comercioExterior,Persona):- habla(ingles,Persona),\nhabla(frances,Persona),\nprofesional(Persona).\n\npuedeAndar(comercioExterior,Persona):- ambicioso(Persona).\npuedeAndar(contaduria,Persona):- contador(Persona),\nhonesto(Persona).\n\npuedeAndar(ventas,Persona):- ambicioso(Persona),\nconExperiencia(Persona).\n\npuedeAndar(ventas,lucia).\n\nprofesional(Persona):- contador(Persona).\nprofesional(Persona):- abogado(Persona).\nprofesional(Persona):- ingeniero(Persona).\n\nambicioso(Persona):- contador(Persona), joven(Persona).\n\nconExperiencia(Persona):- trabajoEn(Persona,_).\n\n%Roque\ncontador(roque).\njoven(roque).\ntrabajoEn(roque,acme).\nhabla(roque,frances).\nhonesto(roque).\n\n%Ana\ningeniero(ana).\nhabla(ana,ingles).\nhabla(ana,frances).\ntrabajoEn(ana,omni).\n\n%Lucia\nhabla(lucia,ingles).\nhabla(lucia,frances).\ntrabajoEn(lucia,omni).\n\n%Cecilia\nabogado(cecilia).\nambicioso(cecilia).\nhabla(cecilia,frances).\n\n%Magolla\nabogado(magolla).\njoven(magolla).\n\n%Tests\ntest(test_puedeAndar_proyectos_ana):-\npuedeAndar(proyectos,ana).\n\ntest(test_puedeAndar_proyectos_magolla):-\npuedeAndar(proyectos,magolla).\n\ntest(test_no_puedeAndar_proyectos_roque):-\nnot(puedeAndar(proyectos,roque)).\n\ntest(test_no_puedeAndar_proyectos_lucia):-\nnot(puedeAndar(proyectos,lucia)).\n\ntest(test_puedeAndar_logistica_ana):-\npuedeAndar(logistica,ana).\n\ntest(test_puedeAndar_logistica_roque):-\npuedeAndar(logistica,roque).\n\ntest(test_no_puedeAndar_logistica_lucia):-\nnot(puedeAndar(logistica,lucia)).\n\ntest(test_no_puedeAndar_logistica_cecilia):-\nnot(puedeAndar(logistica,cecilia)).\n\ntest(test_fulgencio_proyectosSi_logisticaNo):-\npuedeAndar(proyectos,fulgencio),\nnot(puedeAndar(logistica,fulgencio)).\n\ntest(test_clotilde_ventasSi_contaduriaNo):-\npuedeAndar(ventas,clotilde),\nnot(puedeAndar(contaduria,clotilde)).\n\n\ntest(puede_andar_forma_mixta):-\n\taparecePredicado(puedeAndar, mixto).\n\ntest(profesional_forma_extensión):-\n\taparecePredicado(profesional, extensión).\t\n\ntest(ambicioso_forma_comprensión):-\n\taparecePredicado(ambicioso, comprensión).\n\ntest(conExperiencia_forma_comprensión):-\n\taparecePredicado(conExperiencia, comprensión).\t\t\n\ntest(roque_puede_andar_en_comercio_exterior):-\n\tcomercioExterior(roque, si).\n\ntest(roque_puede_andar_en_contaduria):-\n\tcontaduria(roque, si).\n\ntest(roque_puede_andar_en_ventas):-\n\tventas(roque, si).\n\ntest(lucia_no_puede_andar_en_comercio_exterior):-\n\tcomercioExterior(lucia, no).\n\ntest(lucia_puede_andar_en_ventas):-\n\tventas(lucia, si).\n\ntest(ana_puede_andar_en_comercio_exterior):-\n\tcomercioExterior(ana, si).\n","extra":"","content":""})
Remove warnings like the following from output:
Warning: /tmp/mumuki.compile20150327-3-loryr0:22:
PL-Unit: Test maria_trabaja_con_roque: Test succeeded with choicepoint
The following solution passes with failed uses findall expectation:
herramientasDemandadas(Herramientas) :-
findall(Herramienta, necesita(_, Herramienta), Herramientas).
Diferentes soluciones que no son correctas pasan la prueba:
por ejemplo:
costosDeHerramientas(Costos) :-
findall(Costo, costoHerramienta(Herramienta, Costo), Costos).
costoTotalDeHerramientasDemandadas(Sumatoria) :-
costosDeHerramientas(Costos).
sumlist(Costos, Sumatoria).
costoDeHerramienta(Costos):-
findall(Herramienta, herramientaDemandada(Herramienta), Herramientas),
findall(Costo, costoHerramienta(Herramientas,Costo), Costos).
costoTotalDeHerramientasDemandadas(Sumatoria) :-
costosDeHerramientas(Costos).
sumlist(Costos, Sumatoria).
costoDeHerramienta(Costos):-
herramientaDemandada(Herramientas).
findall(Costo, costoHerramienta(Herramientas,Costo), Costos).
costoTotalDeHerramientasDemandadas(Sumatoria) :-
costosDeHerramientas(Costos).
sumlist(Costos, Sumatoria).
costoDeHerramienta(Costos):-
herramientaDemandada(Herramientas).
findall(Herramientas, costoHerramienta(Herramientas,_), Costos).
costoTotalDeHerramientasDemandadas(Sumatoria) :-
costosDeHerramientas(Costos).
sumlist(Costos, Sumatoria).
That's because prolog catches de error when mumukit finishes the process due to timeout.
Nowadays, pl runner throw an exception if predicate does not exist
?- zarlompa().
ERROR: run_query/1: Sintax Error: end_of_clause in zarlompa().
Example:
ム X = 4.
ERROR: writeBinding/1: Undefined procedure: compound_name_arguments/3
Exception: (8) compound_name_arguments('X'=4, =, [_G1004, _G1007]) ? EOF: exit
This happens always, regardless of the final dot presence.
Can we ignore the Warning: Clauses are not together in the source-file
for Prolog solutions?
I have cases where the students must add new clauses for a given predicate or in particulars exercises adding examples in extra code. This warning appears until the exercise is done and it's very annoying and confused.
take https://mumuki.io/exercises/2009-programacion-logica-practica-inversibilidad-puntajeequilibrioescoba for example,
The code:
puntajeEquilibrioEscoba(Competidor, Puntaje):-
metrosEscoba(Competidor, Metros),
Puntaje is round(Metros / 3).
Will say is
is being used but no calculations are being made.
Dada esta solución parcial de un ejercicio:
tiempoTotalVuelo(Vuelo, TiempoTotal):-
vuelo(Vuelo, _, Destinos),
findall(Tiempo, (member(Destino, Destinos), duracion(Destino, Tiempo)), Tiempos),
sumlist(Tiempos, TiempoTotal).
donde no se define el predicado duracion/2 que se usa dentro del findall, si se envía la solución Mumuki muestra:
Revisá el predicado ''/1. Parece que intentaste usar duracion/2, pero no existe. ¿Habrás escrito mal su nombre o pasado una cantidad incorrecta de argumentos?
When a solution use <=
or =>
would be nice show a message remembering that the operators are =<
and >=
. Like the \=
case!
In https://mumuki.io/exercises/1973-programacion-logica-inversibilidad-algunas-cuentas
This input will fail:
cuantaNaftaConsume(Km,Nafta):-
Nafta is 40 * (Km / 600).
Using that same code in swi-prolog 7.2.3 locally will work though. Maybe the swipl version the runner uses is outdated and has problems parsing?
We need to upgrade mumuki and a QueryRunner
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.