Eliza versión en iBASIC



Adaptación del famoso programa Eliza al interprete/compilador iBasic

iBasic es un excelente programa para el aprendizaje de la programación.

iBASIC es un intérprete y compilador de BASIC que hace recordar los viejos tiempos del GWBASIC, pero que añade importantes mejoras y capacidades, siendo además gratuito.

iBASIC está basado en texto, teniendo una consola de interpretación directa, que al igual que los BASICs tradicionales, se pueden editar los programas y ejecutar las órdenes de forma inmediata.

iBASIC soporta programas con y sin números de línea, e incluso dispone de un comando para eliminar dichos números de un programa que disponga de ellos.

iBASIC es una aplicación de consola Windows que ocupa algo másde 500Kb, sin necesitar programa de instalación ni DLLs adicionales.

Solo doble clic y a funcionar.

Además de ser intérprete, también es un compilador, de forma que genera ficheros .exe autónomos, de reducido tamaño, y que tampoco necesitan DLLs adicionales.

Una de las características más interesantes de iBASIC es su capacidad matricial.

Además de operar con números escalares y con cadenas, también puede operar con vectores o matrices de forma nativa, al estilo de como lo hacen lenguajes como FORTRAN, pero con la sencillez del BASIC.

Sumar dos matrices es tan sencillo como escribir: c=a+b

Otro aspecto destacable es la capacidad de networking. iBASIC es capaz de establecer comunicación con servicios UDP y TCP como si de ficheros se tratara, abstrayendo los detalles de la programación de sockets que se hacen en otros lenguajes como en C.

Es por ello, que iBASIC también es una buena opción para probar protocolos o realizar pequeños clientes de red.

Con todo ello, iBASIC es un rápido y potente intérprete/compilador de iniciación a la programación y que permitirá realizar cálculo complejos sin necesidad de costosas y complicadas aplicaciones.

Os recomiendo la descarga del programa y que lo probéis. Si tenéis cualquier duda os podeis poner en contacto con su autor Juan Illescas que os atenderá encantado.

http://ibasic.arredemo.org/index.htm





'
' ELIZA
' Inteligencia Artificial: Conceptos y Programas
' Hartnell, Tim
' Anaya Multimedia, 1984
'
gosub init

GoOn = true

while GoOn
print : color 7 : print string$(79, "-") : print
input "> "; x$
x$ = trim$(lower$(x$))
if empty(x$) then continue

print : color 10

if x$ = z$ then print "Por favor, no te repitas" : continue
z$ = x$
if instr(x$, "adios") <> 1 then
  gosub build_answer
  print answer$
else
  GoOn = false
endif
wend

print "Hasta luego, espero verte de nuevo pronto por la consulta"
color 7

end
'
' Construccion de la respuesta
'
build_answer:
    chain
   node true:
       word$ = left$(x$, instr(x$ + " ", " ") - 1)
       KeyIndex = search(c$, word$)
     
   ' Caso 1: palabra clave encontrada al principio de la frase
        node KeyIndex >= 0:
            gosub handle_at_begin
        else
       sentence$ = x$:gosub get_first_word
       while not empty(word$)
           if let(KeyIndex = search(c$, word$)) >= 0 then break else gosub get_next_word
            wend

        ' Caso 2: palabra clave encontrada en medio de la frase
        elsenode KeyIndex >= 0:
            gosub handle_at_middle
         
    ' Defecto: Palabara clave no encontrada. Imprimir respuesta generica
        elsenode true:
       gosub build_default_ans
endchain
return
'
' Generar respuesta en caso de haber encontrado clave al principio
' IN: KeyIndex
'
handle_at_begin:
    select round(rnd * 2) + 1
   case 1: g$ = d$(KeyIndex)
   case 2: g$ = e$(KeyIndex)
   case 3: g$ = f$(KeyIndex)
endsel

' Comprobar si hay que concatenar pregunta a la respuesta

    ' Respuesta es una pregunta
question = (right$(g$, 1) = "?")

' Caso 1: respuesta directa
if mid$(g$, len(g$) - question, 1) <> "*" then answer$ = g$ + " " : return

' Caso 2: respuesta incluyendo resto de la frase original
g$ = left$(g$, len(g$) - 1 - question)
answer$ = g$ + " "

sentence$ = mid$(x$, len(c$(KeyIndex))+2, len(x$))
remember_next_word = false
gosub get_first_word

while not empty(word$)
if word$ = "mi" and empty(k$) then
  remember_next_word = true
   else
      if remember_next_word then remember_next_word = false:k$ = word$
   endif
   if let(i = search(a$, word$)) >= 0 then word$ = b$(i)
inc answer$, word$ + " "
gosub get_next_word
wend

if question then
  if answer$[1] <> "?" then answer$ = "¿ " +answer$
  inc answer$, "?"
endif
return
'
' Generar respuesta en caso de haber encontrado clave en el medio
'
handle_at_middle:
' Encontrar palabras clave
select round(rnd * 2) + 1
   case 1: q$ = d$(KeyIndex)
   case 2: q$ = e$(KeyIndex)
   case 3: q$ = f$(KeyIndex)
endsel

    ' Respuesta es una pregunta
question = (right$(q$, 1) = "?")
if mid$(q$, len(q$) - question, 1) <> "*" then answer$ = q$ else gosub build_default_ans
return
'
' Generar respuesta por defecto
'
build_default_ans:
if empty(k$) then
  answer$ = defans$(round(rnd * (num_defans-1)) + 1)
else
  gosub answer_from_memory
endif
return
'
' Imprime frase con palabra recordada
'
answer_from_memory:
    select round(rnd * 7) + 1
        case 1: answer$ = "Háblame más sobre tu " + k$
        case 2: answer$ = "Al principio me hablaste de tu " + k$ + ". Cuéntame algo más"
   case 3: answer$ = "¿ Tiene algo que ver con tu " + k$ + "  ?"
   case 4: answer$ = "¿ Existe alguna conexión con tu " + k$ + "  ?"
   case 5: answer$ = "¿ Por qué no retrocedemos un poco y hablamos más de tu " + k$ + " ?"
   case 6: answer$ = "¿ Te sugiere que existe alguna conexión entre eso y tu " + k$ + " ?"
   case 7: answer$ = "¿ Preferirías hablar sobre tu " + k$ + " ?"
   case 8: answer$ = "¿ Creo que el preocuparse sobre tu " + k$ + " no te conduce a nada"
endsel
if rnd > 0.7 then k$ = ""
return
'
'  IN: sentence$
' OUT: word$
get_first_word:
curpos = instr(sentence$, " ")
if curpos > 0 then word$ = left$(sentence$, curpos-1) else word$ = sentence$
return

get_next_word:
if curpos = 0 then word$="":return
curpos2 = instr(sentence$, " ", curpos + 1)
      word$   = mid$(sentence$, curpos + 1, if(curpos2 > 0, curpos2-curpos-1, len(sentence$)))
curpos  = curpos2
return
'
' Inicializacion
'
init:
dim defans$(10)
dim a$(16), b$(16)
dim c$(80), d$(80), e$(80), f$(80)

randomize
clear z$, k$

num_defans = 0
repeat
inc num_defans
read defans$(num_defans)
until defans$(num_defans) = "*"
dec num_defans

num_conj = 0
repeat
inc num_conj
read a$(num_conj), b$(num_conj)
until b$(num_conj) = "*"
dec num_conj

num_ans = 0
repeat
inc num_ans
read c$(num_ans), d$(num_ans), e$(num_ans), f$(num_ans)
until c$(num_ans) = "*" and f$(num_ans) = "*"
dec num_ans

cls : print : print : color 10
print "Bienvenido a otra sesion con el doctor."
print
print "Dime, ¿ cuál es tu problema ?"
return




'
' Data block
'
data "¿ Qué te sugiere ?"
data "No estoy seguro de entender eso por completo"
data "No seas tan escueto, por favor acláralo un poco más"
data "Eso es muy interesante"
data "Bien, bien... por favor continua..."
data "¿ Por qué ?"
data "¿ Y entonces ?"
data "Ya veo... por favor sigue hablando más sobre ello"
data "*"

' Conjugacion
data "soy", "es", "eras", "era", "yo", "tu", "mi", "tu", "mis", "tus"
data "tu tienes", "yo tengo", "tu", "mi", "eres", "soy", "me", "te", "te", "me"
data "tu estas", "yo estoy", "tuyo", "mio", "tu", "mi", "mi", "tu"
data "*", "*"
'
data "necesito"
data "Por qué necesitas*?"
data "Estarías contento si pudieras conseguir*?"
data "Estás seguro de que necesitas*?"
'
data "por que tu no"
data "Piensas realmente que no*?"
data "Es posible que*"
data "Realmente quieres que*?"
'
data "por que no puedo"
data "Crees que serías capaz de*?"
data "Por qué no puedes*?"
data "Quizás no lo hayas intentado lo suficiente"
'
data "eres"
data "Por qué estás interesado en saber si soy o no*?"
data "Preferirías que no fuera*?"
data "A veces puede que parezca que soy*"
'
data "no puedo"
data "Cómo sabes que no puedes*?"
data "¿ Lo has intentado ?"
data "Quizás, ahora puedas"
'
data "estoy"
data "Acudiste a mi porque estás*?"
data "Cuánto tiempo has estado*?"
data "Crees que es normal estar*"
'
data "soy"
data "Disfrutas siendo*?"
data "Por qué me dices que eres*?"
data "Por qué eres*?"
'
data "quiero"
data "Qué significa para ti*?"
data "Por qué quieres*?"
data "Qué supondría en tu vida si consiguieras*?"
'
data "que"
data "¿ Por qué preguntas eso ?"
data "¿ Qué te responderías para ayudarte ?"
data "¿ Qué piensas tú ?"
'
data "como"
data "¿ Cómo arreglarías eso ?"
data "Lo mejor sería que te respondieras a eso tú mismo"
data "¿ Qué es lo que realmente estás preguntando ?"
'
data "quien"
data "¿ Te haces a menudo esas preguntas ?"
data "¿ Qué respuesta te dejaria más tranquilo ?"
data "¿ Quién crees que*?"
'
data "donde"
data "Esa es una pregunta bastante ingenua"
data "¿ Necesitas realmente saber dónde ?"
data "Qué supondría para tí si yo te dijera donde*?"
'
data "cuando"
data "Cómo podría saber cuando*?"
data "No estamos aquí para discutir sobre el tiempo"
data "Las cosas suelen ocurrir casi siempre en el momento oportuno"
'
data "por que"
data "Por qué no me dices la verdadera razón por la que*?"
data "Qué es lo que has dicho que me ayudaría a decirte por que*?"
data "Necesitas realmente saber por qué*?"
'
data "porque"
data "¿ Es esa la verdadera razón ?"
data "¿ Qué otras razones recuerdas ?"
data "¿ Qué más puede explicar eso ?"
'
data "lo siento"
data "¿ En qué otras circunstancias te disculpas ?"
data "Hay muchas ocasiones en las que no es necesario disculparse"
data "¿ Qué sensación experimentas cuando tienes que disculparte ?"
'
data "hola"
data "Hola... me alegro de verte"
data "Hola... me alegro de que te hayas dejado caer hoy por aquí"
data "¿ Cómo estás ?... tenía ganas de charlar de nuevo contigo"
'
data "buenos dias"
data "Me alegro de verte hoy por aquí"
data "Me alegro de que hayas venido. Tenemos montones de cosas sobre las que hablar"
data "Atiéndeme ahora. Relájete... y hablemos un poco sobre tu situación"
'
data "puede ser"
data "Pareces vacilar un poco"
data "Pareces bastante indeciso"
data "¿ En qué otras circunstancias te muestras indeciso ?"
'
data "no"
data "¿ Por qué te muestras tan negativo sobre eso ?"
data "¿ Estás diciendo que eso no es ser negativo ?"
data "Eres bastante impulsivo. ¿ Qué te sugiere eso ?"
'
data "siempre"
data "Por favor, dame un ejemplo concreto"
data "¿ No te parece que ""siempre"" es un poco exagerado ?"
data "¿ Cuándo ?"
'
data "creo"
data "Dudas*?"
data "¿ Piensas realmente eso ?"
data "Pero no estás seguro*?"
'
data "amigo"
data "¿ Por qué tocas ahora el tema de los amigos ?"
data "¿ Cuál es tu mejor recuerdo de un amigo ?"
data "Por favor háblame más sobre tus amistades..."
'
data "amigos"
data "¿ En qué modo te afectan las relacciones de tus amigos ?"
data "¿ Qué te hizo comenzar a hablar de los amigos, precisamente ahora ?"
data "¿ De qué modo te engañan tus amigos ?"
'
data "si"
data "¿ Qué tipo de mentiras te molestan ?"
data "Eres bastante positivo"
data "Pareces muy seguro de ello"
'
data "ordenador"
data "¿ Qué es lo que sientes sentado ahí y hablándome como a una persona ?"
data "¿ Lo piensas sobre mí en particular ?"
data "¿ Qué aspectos de los ordenadores te interesan más ?"
'
data "esta"
data "Piensas que estar*?"
data "En qué circunstancias estarías*?"
data "Bien podría ser que*"
'
data "es"
data "Qué grado de certeza depositarías en ello siendo*?"
data "Estás seguro de que es*?"
data "Qué sensaciones experimentarías si te dijera que, probablemente no es*?"
'
data "puedes"
data "Qué te hace pensar que no puedo*?"
data "No piensas que puedo*?"
data "Quizás te gustaría ser capaz de*"
'
data "puedo"
data "Tal vez no quieras*"
data "Te gustaría ser capaz de*?"
data "Dudo que puedas*"
'
'data "estas"
'data "Por qué piensas que estoy*?"
'data "Te alegra creer que estoy*?"
'data "Tal vez te gustaría estar*"
'
data "estas"
data "Por qué piensas que estoy*?"
data "Te alegra creer que estoy*?"
data "Por qué dices que estoy*?"
'
data "yo no"
data "Realmente no*"
data "Por qué no*?"
data "Te gustaría ser capaz de*?"
'
data "me siento"
data "Vamos a examinar esa afirmación más detenidamente"
data "¿ Te sientes normalmente de ese modo ?"
data "¿ Qué emociones te despiertan esos sentimientos ?"
'
data "siento"
data "Háblame más sobre esos sentimientos"
data "Sientes a menudo*?"
data "Disfrutas sintiendo*?"
'
data "tengo"
data "Por qué me dices que tienes*?"
data "Para mí está claro que tienes*"
data "Cómo podría ayudarte con*?"
'
data "podria"
data "Explícame por qué podrías*?"
data "A quién más le has dicho que podrías*?"
data "Qué seguridad tienes de que podrías"
'
data "hay"
data "Por supuesto que hay*"
data "Estás seguro que hay*?"
data "Te gustaría que hubiera*?"
'
data "mi"
data "Es importante para tí que tu*?"
data "Entiendo, tu*"
data "Qué significa para tí que tu*?"
'
data "tu"
data "Esta sesión es para ayudarte... no para que andemos discutiendo"
data "¿ Qué te impulsó a decir eso sobre mi ?"
data "Recuerda que tomo nota de todo lo que estás diciendo, para poder arreglar tu situación"
'
data "sexo"
data "Creo que no deberías discutir eso conmigo"
data "¿ Realmente te preocupan los asuntos sexuales ?"
data "Como siempre, los temas sexuales son importantes"
'
data "me gusta"
data "Es bueno que te guste*"
data "Por qué te gusta*?"
data "Qué más te gusta además de*?"
'
data "me gustan"
data "Es bueno que te gusten*"
data "Por qué te gustan*?"
data "Qué más te gusta además de*?"
'
data "sueles"
data "Sí, suelo*"
data "¿ Por qué te interesa saberlo ?"
data "Acaso sueles*?"
'
data "me voy"
data "Cuándo has decidido irte*?"
data "Por qué quieres irte*?"
data "Tienes otros planes además de irte*?"
'
data "*", "*", "*", "*"

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.