Anda di halaman 1dari 2

Reseña de Classic Computer Science Problems

in Swift *
Dr. Alejandro Guerra-Hernández
Centro de Investigación en Inteligencia Artificial
Universidad Veracruzana
4 de abril de 2018

Existe una venerable tradición en la Inteligencia Artificial, en cuanto a los


textos de técnicas de programación orientadas a ese dominio. Ejemplos de ello
son el libro de Programación Prolog para la Inteligencia Artificial de Ivan Bratko
(Addison Wesley, 2012); y su contraparte en Lisp, Paradigmas de Programación
en Inteligencia Artificial, de Peter Norvig (Morgan Kaufmann, 1992), quien
por cierto, recuperó recientemente los derechos de autor y ha puesto texto y
código en el repositorio https://github.com/norvig/paip-lisp, disponible para
todo el público. Estos libros tienen el doble propósito de introducir al lector en
los problemas típicos de la Inteligencia Artificial y enseñar el lenguaje elegido a
través de su solución. Desafortunadamente, tal propósito no se ha
generalizados a otros lenguajes de programación con el mismo tino, quizás por
que Lisp y Prolog son además de herramientas para la Inteligencia Artificial,
productos de ella. Pues bien, el libro que hoy nos ocupa puede insertarse en
esta tradición, si bien su título no lo exprese explícitamente –Aunque, por otra
parte, es halagüeño que los problemas de Inteligencia Artificial abordados sean
considerados ya como problemas clásicos de las Ciencias de la Computación.
Swift (https://swift.org) es un lenguaje de programación de propósito
general, abierto, fuertemente tipificado (con inferencia de tipos) y compilado,
desarrollado por Apple para sus sistemas operativos iOS, watchOS, tvOS y
macOS; y para Linux. Evidentemente, su principal atractivo no es ser multi-
plataforma, sino ser la puerta de acceso al desarrollo de aplicaciones nativas pa-
ra los dispositivos de Apple. Se trata de un lenguaje multi-paradigma, orientado
a objetos, con elementos de programación funcional y orientada a protocolos.
Su sitio oficial provee la documentación necesaria para aprender el lenguaje y
existe ya una basta literatura al respecto. Sin embargo, muchos de estos textos
enfatizan el uso de las herramientas de desarrollo de Apple y los detalles re-
lacionados con la implementación de interfaces gráficas en sus dispositivos, en
detrimento del uso del lenguaje para resolver problemas.
*Kopec, David. Classic Computer Science Problems in Swift: Essential techniques for prac-

ticing programmers. Manning Publications, Shelter Island, NY., USA 2018.

1
El libro que hoy revisamos opta por el extremo opuesto, usar solo la librería
estándar del lenguaje, para abordar problemas típicos de un plan de estudios
de Ciencias de la Computación, muchos de ellos en el dominio de la Inteligencia
Artificial. Los primeros dos capítulos abordan técnicas de resolución de proble-
mas que nos son familiares: Recursividad, búsquedas binarias, en profundidad,
en amplitud, informadas (A∗). El tercer capítulo aborda problemas típicos de
la programación por restricciones: Coloreo de mapas, el problema de las ocho
reinas, acertijos cripta-aritméticos, etc. El capítulo cuarto revisa los algoritmos
para manejo de grafos. Por cierto, Kopec es también autor de una librería abierta
para manejo de grafos en Swift (https://github.com/davecom/SwiftGraph) que
va más allá de lo expuesto en el libro. El capítulo cinco contiende con los
algoritmos genéticos y el sexto con k-means, el conocido algoritmo de aprendi-
zaje automático para agrupamiento. El capítulo séptimo es acerca de las redes
neuronales y el octavo incluye problemas de optimización, como el de la mochila
y el del agente viajero; y el uso del algoritmo minimax para jugar gatos.
Aunque el libro no tiene la profundidad de los textos de Batko y Norvig con
respecto a los problemas de la Inteligencia Artificial abordados, sí que es bas-
tante correcto en su presentación. Por otra parte, un conocimiento somero de la
sintaxis y semántica de Swift ayuda a su lectura. Quizás el aspecto más atrac-
tivo del texto es el uso de los diferentes paradigmas subyacente en Swift para
resolver los diversos problemas planteados y sus detalles algorítmicos, aspectos
que además está muy bien comentado por el autor. El libro se complementa
con un repositorio de su código, disponible gratuitamente (https://github.
com/davecom/ClassicComputerScienceProblemsInSwift). El repositorio pro- vee
un conjunto de playgrounds que el usuario puede utilizar para experimentar de
manera interactiva con el código del libro. Los playgrounds son la versión de
Apple del concepto de REPL (Read-Eval-Print Loop), típico de Lisp y Prolog:
Una consola interactiva donde es posible ejecutar código incrementalmente. El
código es compatible con la última versión de Swift (4.1) y Xcode (9.3). La
mayor parte de éste debe poderse ejecutar también en Linux.
La compra del libro da acceso a versiones electrónicas en formatos ePub,
MOBI y PDF. Además, la editorial Manning provee una versión en línea, en un
formato conocido como livebook, básicamente una versión interactiva del libro.
Además se puede acceder a un foro de discusión alojado en la página web de la
editorial.
Por lo anterior, podemos decir que este texto es excelente como segundo libro
para aprender el lenguaje y aproximarse a la Inteligencia Artificial. El uso de los
playgrounds lo hace muy atractivo para complementar un curso de introducción
a la Inteligencia Artificial. Consciente de ello, el autor nos provee un apéndice
que incluye una larga lista de recursos para profundizar en Swift, algoritmos y
estructuras de datos, Inteligencia Artificial, programación funcional; así como
una serie de proyectos abiertos que usan el lenguaje.

Anda mungkin juga menyukai