CLIPS

**CLIPS** é unha ferramenta que prové un ambiente de desenvolvemento para a produción e execución de sistemas expertos. Foi creado a partir de 1984, no Lyndon B. Johnson Space Center da NASA. Os fondos cesaron a principios dos anos 1990, e houbo un mandato da NASA para comprar software comercial.

CLIPS é un acrónimo de C Language Integrated Production System (Sistema de Produción Integrado en Linguaxe C). Na actualidade, entre os paradigmas de programación que soporta CLIPS atópanse a Programación lóxica, a Programación imperativa e a Programación orientada a obxectos.

CLIPS probablemente é o sistema experto máis amplamente usado debido a que é rápido, eficiente e gratuíto. Aínda que agora é de dominio público, aínda é actualizado e mantido polo seu autor orixinal, Gary Riley.

## Historia e motivación 
Durante 1984, no Lyndon B. Johnson Space Center da NASA, a sección de Intelixencia artificial (IA) desenvolvera ao redor dunha ducia de prototipos de sistemas expertos usando hardware e software daquela época. A pesar do demostrado potencial dos sistemas expertos, a maioría daqueles prototipos non estaban sendo usados regularmente. Segundo a NASA isto debeuse a que o linguaxe de programación usado para o desenvolvemento destas aplicacións era LISP. Atopáronse varias debilidades de LISP, entre as que se destacan tres: non estaba dispoñible para unha ampla variedade de equipos de cómputo, non era facilmente integrable con outras aplicacións, e o seu custo era moi elevado.

A sección de Intelixencia Artificial notou que o uso dunha linguaxe convencional (como C) eliminaría a maioría deses inconvenientes. Ao principio buscouse que a nova ferramenta fose desenvolvida por terceiros, pero os custos aínda eran demasiado altos e os tempos de entrega non eran satisfactorios. Polo tanto, foi necesario que a sección de Intelixencia Artificial desenvolvese a súa propia linguaxe para sistemas expertos baseado en C.

O primeiro prototipo de CLIPS foi desenvolvido durante a primavera (boreal) de 1985, e tomou pouco máis de dous meses. Era compatible con todos os desenvolvementos feitos pola sección de Intelixencia Artificial, e a súa sintaxe estaba baseada na sintaxe de ART (outra ferramenta para o desenvolvemento de sistemas expertos). Con todo, CLIPS foi desenvolvido sen ter acceso ou coñecer previamente o código fonte de ART.

Inicialmente, co desenvolvemento de CLIPS buscábase ter maior coñecemento sobre a construción de sistemas expertos e botar as bases dunha linguaxe para substituír as ferramentas comerciais que estaban sendo usadas. A versión 1.0 de CLIPS demostrou que iso era posible. Logo dun desenvolvemento adicional, viuse que o custo de CLIPS sería significativamente menor ao doutras ferramentas e que sería ideal para adestramento. Outro ano de desenvolvemento e de uso interno serviu para mellorar portabilidade, desempeño, funcionalidade e documentación de soporte. A mediados de 1986, CLIPS v3.0 estivo dispoñible para grupos fóra da NASA.

Outras funcionalidades agregadas transformaron CLIPS; xa non era unha ferramenta para adestramento sobre construción de sistemas expertos, senón que agora servía tamén para o desenvolvemento e execución dos mesmos. As versións CLIPS v4.0 e v4.1 (1987) tiñan significativas melloras en canto a desempeño, integración con outras linguaxes, e capacidade de execución. CLIPS v4.2 (1988) foi unha completa re-escritura do código fonte co fin de facelo máis modular. Esta versión tamén incluíu un manual detallado da arquitectura de CLIPS e unha aplicación de axuda para a verificación e validación de programas baseados en regras. Novas funcionalidades viñeron coa CLIPS v4.3 (1989).

Orixinalmente, CLIPS era unha linguaxe de regras baseado no Algoritmo Rete (Programación Lóxica). CLIPS v5.0 (1991) introduciu dúas novos paradigmas de programación: Programación Imperativa e Programación Orientada a Obxectos (POO). A linguaxe POO dentro de CLIPS é chamado COOL (CLIPS Object-Oriented Language, ou Linguaxe Orientada a Obxectos de CLIPS). CLIPS v5.1 (1991) xa soportaba as recentemente desenvolvidas ou melloradas interfaces X Window, MS-DOS e Macintosh. CLIPS v6.0 (1993) tiña novas funcionalidades relacionadas co recoñecemento de patróns en obxectos/regulas e soporte a Enxeñería de Software baseada en regras. CLIPS v6.1 (1998) soportaba compiladores C++, aínda que xa non soportaba os vellos compiladores C non ANSI. Tamén se agregaron comandos para levar control do tempo de desenvolvemento e para funcións definidas polo usuario. CLIPS v6.2 é soportada por diversos sistemas operativos, e ten melloras na súa interface de desenvolvemento para Windows 95/98/NT e MacOS.

Actualmente, CLIPS é mantido fóra da NASA como software de dominio público.

## Características principais 
As características principais de CLIPS son:
* **Representación do Coñecemento:** CLIPS permite manexar unha ampla variedade de coñecemento, soportando tres paradigmas de programación: o declarativo, o imperativo, e o orientado a obxectos. A programación lóxica baseada en regras permite que o coñecemento sexa representado como regras heurísticas que especifican as accións a ser executadas dada unha situación. A POO permite modelar sistemas complexos como compoñentes modulares. A programación imperativa permite executar algoritmos da mesma xeito que en C, Java, LISP e outras linguaxes.
* **Portabilidade:** CLIPS foi escrito en C co fin de facelo máis portable e rápido, e foi instalado en diversos sistemas operativos (Windows 95/98/NT, Mac OS X, Unix) sen ser necesario modificar o seu código fonte. CLIPS pode ser executado en calquera sistema cun compilador ANSI de C, ou un compilador de C++. O código fonte de CLIPS pode ser modificado en caso que o usuario considéreo necesario, co fin de agregar ou quitar funcionalidades.
* **Integrabilidade:** CLIPS pode ser embebido en código imperativo, invocado como unha sub-rutina, e integrado con linguaxes como C, Java, FORTRAN e outros. CLIPS incorpora unha completa linguaxe orientada a obxectos (COOL) para a elaboración de sistemas expertos. Aínda que está escrito en C, o seu interface máis próxima parécese a LISP. Poden escribirse extensións a CLIPS sobre C, e ao contrario, CLIPS pode ser chamado desde C. CLIPS pode ser estendido polo usuario mediante o uso de protocolos definidos.
* **Desenvolvemento Interactivo:** A versión estándar de CLIPS prové un ambiente de desenvolvemento interactivo e baseado en texto; este inclúe ferramentas para a depuración, axuda en liña, e un editor integrado. As interfaces deste ambiente teñen menús, editores e fiestras que foron desenvolvidos para MacOS, Windows 95/98/NT, X Window, entre outros.
* **Verificación/Validación:** CLIPS contén funcionalidades que permiten verificar as regras incluídas no sistema experto que está sendo desenvolvido, incluíndo deseño modular e particionamiento da base de coñecementos do sistema, recoñecemento de restricións estático e dinámico para funcións e algúns tipos de datos, e análises semántico de regras para previr posibles inconsistencias.
* **Documentación:** Na páxina web oficial de CLIPS atópase unha extensa documentación que inclúe un Manual de Referencia e unha Guía do Usuario.
* **Baixo Custo:** CLIPS é un software de dominio público.

## Exemplo de CLIPS 
Como outras linguaxes para sistemas expertos, CLIPS traballa con regras e feitos. Algúns feitos poden facer que unha regra sexa aplicable. Unha regra aplicable actívase. En principio as regras e feitos créanse definíndoos, como se mostra a continuación:

 (deffacts trouble_shooting
     (car_problem (name ignition_key) (status on))
     (car_problem (name engine) (status wont_start))
     (car_problem (name headlights) (status work))
  )
 (defrule rule1
     (car_problem (name ignition_key) (status on))
     (car_problem (name engine) (status wont_start))
      =>
     (assert (car_problem (name starter) (status faulty))
  )

## Derivados de CLIPS 
Unha das razóns do amplo uso de CLIPS está nos seus derivados e interfaces con outras linguaxes, como:

* JESS: implementación de CLIPS en Java.
* FuzzCLIPS: incorpora a CLIPS a posibilidade de usar razoamento difuso.
* CLIPSMM: unha interface libre de CLIPS con C++.
* PHLIPS: extensión para PHP.
*EHSIS : Implementación da linguaxe CLIPS con APIs adicionais e documentación en castelán.

## Ligazóns externas 
* Páxina oficial do proxecto