in Swift *
Dr. Alejandro Guerra-Hernández
Centro de Investigación en Inteligencia Artificial
Universidad Veracruzana
4 de abril de 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.