Navbar Logo
Sign In

MagicHaskeller: Un Sistema de Programación Funcional Inductivo para Programadores Principiantes/Casuales de Haskell

By Ramon Gandolffi | Created: June 13, 2024 | Last updated: December 16, 2024 | Read Time: 7 minutes

Articulo orginal por https://nautilus.cs.miyazaki-u.ac.jp/~skata/MagicHaskeller.html
Susumu Katayama, Universidad de Miyazaki

日本語 (japonés)

(El alumno de refuerzo galardonado que utiliza MagicHaskeller se encuentra al final de esta página).

(También existe una variante experimental de MagicHaskeller que sintetiza funciones para Microsoft Excel).

¡Úsalo ahora!

Especifique una función f escribiendo un predicado como una expresión con valor booleano. Obtendrá funciones que generalizan la especificación.

Ejemplos

f "abcde" 2 == "aabbccddee"

Synthesize f

f [(+3), (4-)] 5 == [8, -1]

Synthesize f

f ["ABCDE", "DF","1234", ""] == ["", "DF","1234","ABCDE"]

Synthesize f

f [3, 4, 5.6] ~= 4.2

Synthesize f

f [1/2, 1/3] ~= [1, sqrt 3 / 2]

Synthesize f


Consejos

  • Puede usar cualquier expresión de Haskell que devuelva un valor booleano, siempre que no use expresiones let ni cláusulas while. Puede usar funciones de Prelude y algunas otras funciones. También puede usar el operador (~=), que funciona como "casi igual" para Doubles y contenedores que contienen Doubles, y como (==) para otros tipos.
  • Todas las funciones impresas son semánticamente diferentes entre sí: en otras palabras, cada función recién generada no se imprimirá hasta que su diferencia con todas las funciones existentes se pruebe mediante pruebas aleatorias. Hasta entonces, se suministran cada vez más números aleatorios. (Tenga en cuenta que la diferencia se puede 'probar' mediante pruebas aleatorias, mientras que la equivalencia solo se puede 'adivinar'. Consulte el artículo de PRICAI 2008 en mi página principal.)
  • Si envía una expresión que no incluye f, verá los resultados de aplicar algunos argumentos aleatorios. Se supone que esto es útil para comprender la expresión. Además, esto significa que si envía una expresión nula, simplemente se evaluará.
  • Se puede obtener un efecto similar haciendo clic en el botón EXEMPLIFY a la izquierda de las expresiones resultantes, pero luego, los valores de retorno se encuentran en cuadros de texto. Si cree que algún valor de retorno es diferente de su expectativa, puede corregirlo y volver a buscar haciendo clic NARROW SEARCH en el botón.
    (Por lo tanto, una forma sencilla de utilizar esta herramienta web es comenzar con un solo predicado de ejemplo, verificar los valores de retorno de algunos argumentos y luego refinar la búsqueda hasta que esté satisfecho con el resultado).
  • La autocorrección funciona hasta cierto punto. Al sintetizar expresiones, "=" y "&" se reemplazan con "~=" y "&&" respectivamente. Al generar ejemplos de entrada-salida, los paréntesis se balancean y las variables no vinculadas se vinculan.
  • Las funciones con argumentos no utilizados están ocultas de forma predeterminada y se imprimen en gris si marca la casilla de verificación correspondiente antes de la búsqueda.
  • Si envía solo una palabra, saltará a la página de documentación de la biblioteca que explica la palabra (o saltará a Hoogle si este sistema no la conoce:).
  • Puede acceder a esta herramienta web instantáneamente mientras usa su escritorio si está usando KDE/TDE. Coloque este archivo en ~/.kde/share/kde4/services/searchproviders/ (para KDE4) y/o ~/.trinity/share/services/searchproviders/ (para TDE). (Es posible que deba cerrar la sesión y volver a iniciarla). Luego, puede realizar una búsqueda abriendo el cuadro de diálogo "Ejecutar comando..." (presionando Alt+F2 o Win+r según sus combinaciones de teclas) y llenando el cuadro de texto con su consulta comenzando con "magh:", como "magh: f 3 == [1,2,3]" o "magh: \a -> a*a". (Avísame si sabes cómo hacer lo mismo con Gnome, Windows, etc.)

Limitaciones, tareas pendientes y planes futuros

  • MagicHaskeller no funciona bien al lidiar con funciones parciales. Las expresiones sintetizadas usan drop 1 en lugar de tail, y foldr const (algo) en lugar de head. Además, el botón EXEMPLIFY no se muestra si la expresión correspondiente puede ser parcial, porque el CGI no puede manejar las funciones parciales correctamente.
  • Las expresiones se sintetizan utilizando un subconjunto limitado de la biblioteca estándar base. Actualmente, se utilizan principalmente valores de Standard Prelude y el módulo Data.List. Además, Float e Integer no se reconocen por ahora. (Aún puede usar Int, Char, Bool, listas, tuplas, Maybe, Double, etc.)
  • La mayoría de las expresiones, incluidos los literales de Char o String, no se pueden sintetizar. Tengo la idea de permitir su uso extrayendo literales de las expresiones de consulta, pero eso aún no está implementado.
  • Para preservar la estabilidad del sistema del servidor, la búsqueda de programas se detiene en algún punto y, como resultado, el servidor que se está ejecutando actualmente no sintetiza expresiones con más de (aproximadamente) 6 aplicaciones de funciones en la forma normal eta-larga. (Digo "aproximadamente" 6 porque internamente una función primitiva puede consistir en algunas funciones y otras pueden tener menor prioridad. Además, el postprocesamiento puede cambiar el número de aplicaciones).
  • Hay algunos casos en los que la función de evaluar expresiones (con / sin argumentos aleatorios) no muestra un HTML correcto.Actualmente, es frágil para funciones parciales, como init y enumFromThenTo.(init [] causa un error, y enumFromThenTo 1 1 2 es infinito).
  • Si experimenta un problema, presione el botón Atrás de su navegador.
  • Sería útil si la interfaz CGI tuviera la capacidad de mostrar una lista de argumentos de ejemplo con la que difieren dos funciones. Si está usando Konqueror o algún navegador web similar, esto se puede lograr de alguna manera dividiendo la ventana verticalmente y haciendo click EXEMPLIFY en sus botones.
  • Los mensajes de error (como los de errores de tipo cometidos por el usuario) podrían imprimirse de mejores maneras, tal vez como la funcionalidad "¿Te refieres a...?" proporcionada por Google.
  • Tal vez se deberían introducir algunos BTS en lugar de usar este tipo de lista de tareas pendientes. De hecho, hay muchas más tareas pendientes que no se enumeran aquí.

Cómo instalar la biblioteca y el servidor

Si está realmente interesado, puede instalar la biblioteca y los programas del servidor en su computadora.

1.Elige tu sistema operativo

  • Linux ... Bien
  • Windows ... Limitado, pero suficiente para jugar
  • MacOS, etc. ... Desconocido, debería funcionar

2.Instalar Haskell Platform

Instale la versión 2014 o 2015. (2015 es ligeramente mejor).

3.Configura la variable PATH.

Unix:

Agrega export PATH=$HOME/.cabal/bin/:$PATH a .bashrc o similar.

Windows:

Agrega %APPDATA%\cabal\bin a la variable Path. (Pero esto puede ser innecesario cuando se usa la versión 2015 de Haskell Platform).

4.Instalar MagicHaskeller escribiendo

  • cabal update
  • cabal install -j MagicHaskeller

(Ignore $ que solo denota el indicador).

En Windows + Haskell Platform 2014, es posible que deba usar

  • cabal install -j MagicHaskeller --flags="-NETWORKURI"

en su lugar. El punto es forzar el uso de la versión ya instalada del paquete de red.

Es posible que deba anular el registro de algún paquete temporalmente y reiniciar la instalación nuevamente.

En mi caso, tuve que anular el registro del paquete HTTP, entonces

  • ghc-pkg unregister HTTP
  • cabal install -j MagicHaskeller

Al realizar la instalación, obtendrá la biblioteca, el ejecutable MagicHaskeller que funciona como un REPL sintetizador independiente y un servidor backend, y el ejecutable MagicHaskeller.cgi que es el programa frontend CGI. Su uso se explicó de alguna manera en AAIP 2015.

Para aquellos interesados en usar la biblioteca, la página de Hackage para MagicHaskeller proporciona documentación sobre cada uno de los módulos expuestos. Además, aquí está la página web antigua para las versiones de su biblioteca. Sin embargo, si desea reproducir los mismos resultados que MagicHaskeller en la web utilizando la biblioteca en lugar de usar el ejecutable MagicHaskeller, debe leer el código fuente de MagicHaskeller/SimpleServer.hs, MagicHaskeller/Minimal.hs y MagicHaskeller/LibTH.hs, o contactarme.


Agente MagicHaskeller
MagicHaskeller se puede usar para implementar un agente de IA general! Aquí se encuentran el agente de aprendizaje por refuerzo incremental galardonado y su breve documentación presentada para la Ronda 1 del Desafío de IA General organizado por GoodAI.


Otros Materiales
resumen extendido y el archivo de presentación utilizado para la presentación en el Simposio de Haskell 2013. (Algunos enlaces se actualizan para que sean utilizables en este entorno, para aquellos de ustedes que estén interesados).

Material de AAIP 2013
Material de AAIP 2015


Author profile
Ramon Gandolffi

Ramon is an accomplished translator, skillfully navigating linguistic landscapes to convey intricate meanings across cultures. His acute attention to detail and profound grasp of language nuances allow him to seamlessly transport readers into the heart of diverse texts, ensuring the authenticity and depth of each translation.


Related Articles
logo
El debate sobre el calentamiento global El debate sobre el calentamiento global CSR

Articulo Original:

By Ramon Gandolffi

September 16, 2024

Read post
logo
La guía de referencia de Hoffman La guía de referencia de Hoffman CSR

Articulo original :

By Ramon Gandolffi

July 29, 2024

Read post
logo
Una Meditación de Acción de Gracias Una Meditación de Acción de Gracias CSR

Artículo Original:

By Ramon Gandolffi

July 19, 2024

Read post
logo
20 Preguntas 20 Preguntas CSR

Artículo Original: https://...

By Ramon Gandolffi

July 01, 2024

Read post
ChicksX Logo The lowest fee crypto exchange [email protected] ENG / USD
ChicksX
Locations
Blog
Bug Bounty
More
Buy USD to BTC
Buy USD to USDT
Buy CAD to BTC
Buy USD to ETH
Buy CAD to ETH
Buy CAD to USDT
Buy CAD to USDC
Sell BTC to CAD
Swap USD to CAD
Buy BDT to BTC
Buy CAD to SOL
Buy EUR to BTC
Sell BTC to USD
Buy PLN to ETH
Sell USDT to CAD
Buy USD to SOL
Swap BTC to ETH
Buy CAD to LTC
Buy PLN to BTC
Buy USD to XRP
Swap ETH to BTC
Sell USDC to CAD
Buy BDT to ETH
Buy CAD to USDC
Buy USD to USDC
Buy EUR to ETH
Buy CAD to XRP
Buy PKR to USDT
Sell USDT to USD
Sell SOL to CAD
Buy USD to LTC
Buy PLN to LTC
Buy IQD to XRP
Buy EUR to USDT
Buy GBP to BTC
Buy TTD to USDT
Sell ETH to CAD
Buy PKR to BTC
Buy PLN to USDT
Buy USD to ADA
Buy BRL to BTC
Buy CAD to TRX
Buy PLN to USDC
Buy INR to USDT
Buy USD to BCH
Sell LTC to CAD
Sell SHIB to USD
Buy DOP to BTC
Buy BDT to USDT
Buy PKR to ETH
Support
Contact Us
FAQ
Sitemap
API Reference
Legal
Privacy Policy
Terms of Service
Cookies Policy
More
About Us
Accessibility
Careers
Code of Ethics
Complaints Policy
Cookies Policy
Crypto Asset Statements
CX Coin
Disclaimer
Editorial Policy
Modern Slavery Statement
OTC
Escrow
Sitemap
Trustpilot Reviews
4.1/5
ChicksX
Locations
Blog
Bug Bounty
More
Buy USD to BTC
Buy USD to USDT
Buy CAD to BTC
Buy USD to ETH
Buy CAD to ETH
Buy CAD to USDT
Buy CAD to USDC
Sell BTC to CAD
Swap USD to CAD
Buy BDT to BTC
Buy CAD to SOL
Buy EUR to BTC
Sell BTC to USD
Buy PLN to ETH
Sell USDT to CAD
Buy USD to SOL
Swap BTC to ETH
Buy CAD to LTC
Buy PLN to BTC
Buy USD to XRP
Swap ETH to BTC
Sell USDC to CAD
Buy BDT to ETH
Buy CAD to USDC
Buy USD to USDC
Buy EUR to ETH
Buy CAD to XRP
Buy PKR to USDT
Sell USDT to USD
Sell SOL to CAD
Buy USD to LTC
Buy PLN to LTC
Buy IQD to XRP
Buy EUR to USDT
Buy GBP to BTC
Buy TTD to USDT
Sell ETH to CAD
Buy PKR to BTC
Buy PLN to USDT
Buy USD to ADA
Buy BRL to BTC
Buy CAD to TRX
Buy PLN to USDC
Buy INR to USDT
Buy USD to BCH
Sell LTC to CAD
Sell SHIB to USD
Buy DOP to BTC
Buy BDT to USDT
Buy PKR to ETH
Buy USD to BTC
Buy USD to USDT
Buy CAD to BTC
Buy USD to ETH
Buy CAD to ETH
Buy CAD to USDT
Buy CAD to USDC
Sell BTC to CAD
Swap USD to CAD
Buy BDT to BTC
Buy CAD to SOL
Buy EUR to BTC
Sell BTC to USD
Buy PLN to ETH
Sell USDT to CAD
Buy USD to SOL
Swap BTC to ETH
Buy CAD to LTC
Buy PLN to BTC
Buy USD to XRP
Swap ETH to BTC
Sell USDC to CAD
Buy BDT to ETH
Buy CAD to USDC
Buy USD to USDC
Buy EUR to ETH
Buy CAD to XRP
Buy PKR to USDT
Sell USDT to USD
Sell SOL to CAD
Buy USD to LTC
Buy PLN to LTC
Buy IQD to XRP
Buy EUR to USDT
Buy GBP to BTC
Buy TTD to USDT
Sell ETH to CAD
Buy PKR to BTC
Buy PLN to USDT
Buy USD to ADA
Buy BRL to BTC
Buy CAD to TRX
Buy PLN to USDC
Buy INR to USDT
Buy USD to BCH
Sell LTC to CAD
Sell SHIB to USD
Buy DOP to BTC
Buy BDT to USDT
Buy PKR to ETH
Buy USD to BTC
Buy USD to USDT
Buy CAD to BTC
Buy USD to ETH
Buy CAD to ETH
Buy CAD to USDT
Buy CAD to USDC
Sell BTC to CAD
Swap USD to CAD
Buy BDT to BTC
Buy CAD to SOL
Buy EUR to BTC
Sell BTC to USD
Buy PLN to ETH
Sell USDT to CAD
Buy USD to SOL
Swap BTC to ETH
Buy CAD to LTC
Buy PLN to BTC
Buy USD to XRP
Swap ETH to BTC
Sell USDC to CAD
Buy BDT to ETH
Buy CAD to USDC
Buy USD to USDC
Buy EUR to ETH
Buy CAD to XRP
Buy PKR to USDT
Sell USDT to USD
Sell SOL to CAD
Buy USD to LTC
Buy PLN to LTC
Buy IQD to XRP
Buy EUR to USDT
Buy GBP to BTC
Buy TTD to USDT
Sell ETH to CAD
Buy PKR to BTC
Buy PLN to USDT
Buy USD to ADA
Buy BRL to BTC
Buy CAD to TRX
Buy PLN to USDC
Buy INR to USDT
Buy USD to BCH
Sell LTC to CAD
Sell SHIB to USD
Buy DOP to BTC
Buy BDT to USDT
Buy PKR to ETH
Support
Contact Us
FAQ
Sitemap
API Reference
Legal
Privacy Policy
Terms of Service
Cookies Policy
More
About Us
Accessibility
Careers
Code of Ethics
Complaints Policy
Cookies Policy
Crypto Asset Statements
CX Coin
Disclaimer
Editorial Policy
Modern Slavery Statement
OTC
Escrow
Sitemap
About Us
Accessibility
Careers
Code of Ethics
Complaints Policy
Cookies Policy
Crypto Asset Statements
CX Coin
Disclaimer
Editorial Policy
Modern Slavery Statement
OTC
Escrow
Sitemap
About Us
Accessibility
Careers
Code of Ethics
Complaints Policy
Cookies Policy
Crypto Asset Statements
CX Coin
Disclaimer
Editorial Policy
Modern Slavery Statement
OTC
Escrow
Sitemap
Social
Trustpilot Reviews
4.1/5
Copyright © 2026, ChicksX.com All Rights Reserved