lunes, 25 de octubre de 2010

.: Intrucciones Scheme :.

:: Scheme ::



Materia. Lab de Leng de Progr

Hora. V1(Jueves)

En esta ocasión, hablaremos algo sobre el lenguaje Scheme.
Aclaro que me estoy basando al programa Cuad.scm” que realice para la clase normal, el cual te muestra los resultados de la variable x de una ecuación de segundo grado.
A como pude notarlo, un programa sencillo tiene una estructura como la que sigue:
(define (nombre_función argumentos)
                (proceso_función)
)
Con esto simplemente definimos una función que lleva a cabo cierto proceso, donde nombre_funcion es definido por nosotros mismos, y argumentos se refiere a las variables de entrada que va a recibir nuestra función para realizar los procesos que le indiquemos.
Para los que ya han visto algo de Scheme, me darán la razón que puede llegar a ser algo confuso, debido al uso de tantos paréntesis.
Y el problema al crear algo sencillo en Scheme directamente en el terminal es más difícil, pues no puedes regresarte en el renglón escrito para teclear algo que se te paso sin prescindir del back space. Es decir, si te falto escribir algo, tienes que borrar lo que has escrito en la línea hasta llegar al punto donde vas a colocar aquello que olvidaste.
Yo opino que es por esta razón por la cual recomiendo mejor crear el código en un archivo por medio de Emacs. Cabe mencionar que todo archivo perteneciente al lenguaje de Scheme, tiene la extensión *.scm. Por consiguiente podemos tener un archivo así:
nombre_del_archivo.scm
Hablando de algo más, por si se dan cuenta, el ordenamiento de las operaciones en lenguaje Scheme es prefija.
Es decir, el operador aparece antes de los dos argumentos que va a operar.
Por ejemplo, en elnguaje Scheme:
+ 4 5 ----->>> ES LO MISMOS QUE ----->>> 4 + 5
Otras instrucciones presentes
  • (cond ((condición) (proceso))
    (else (otro proceso)))

    Esta instrucción funciona como un simple IF - ELSE totalmente conocido en lenguaje C. Si la condición se cumple, se realiza el proceso indicado. De lo contrario, se lleva a cabo el otro proceso que hayamos estipulado.
  • (newline)Sólo imprime una nueva línea al momento de mostrar resultados en pantalla. Es como el \n en lenguaje C.
  • (display “xxx”)Muestra xxx en pantalla como si fuera un simple texto. Comparando con C nuevamente, es como el printf en Scheme.
Ejecutar un Archivo de Scheme
Para poder ejecutar un archivo de Scheme, primeramente debes tener instalado la paquetería Mit-Scheme. Lo siguiente es seguir los pasos a continuación.
Escribir en el terminal Mit-Scheme
  • Teclear (load “nombre_del_archivo.scm”)
  • Para ejecutar la función contenida en tu código se escribe lo siguiente:
nombre_de_la_función argumentos)

Donde argumentos son las variables que le mandas a la función para poder trabajar.

Por ejemplo: mi código de Scheme es el siguiente:
(define
  (ceros A B C)
     (cond ((>= (raiz A B C) 0) (solucion A B C))

     (else (display "\n\nNO HAY SOLUCION REAL"))))

(define
  (raiz A B C)
       (- (* B B) (* (* 4 A) C)))

(define
  (solucion A B C)
     (newline)

     (display (/ (+ (- B) (sqrt (raiz A B C))) (* 2 A)))

     (newline)

     (/ (- (- B) (sqrt (raiz A B C))) (* 2 A)))
Para correr mi programa ya dentro de la paquetería Mit-Scheme tuve que teclear lo siguiente:
(ceros A B C)
Como pueden apreciar, los argumentos o variables que le mando a mi función ceros se encuentran separados por espacios en blanco.
Problemas con el Código
Planteamiento
Tuve un ligero problema con mi código al momento de ejecutar el mismo.
Como todos saben, las ecuaciones de segundo grado tienen dos resultados para x, ya sean iguales o diferentes.
Por consiguiente, en la función que me calculaba los dos valores requeridos, incruste dos funciones para que sacara el valor negativo y el positivo, pues en la formula general para la ecuación de segundo grado, recuerden que tenemos un ±.
El problema era que al calcular el primer resultado, lo mostraba en pantalla y ahí terminaba mi programa. Ya no obtenía el segundo resultado.
La función que tenía para calcular dichos resultados es la siguiente:
(define
  (solucion A B C)
     (newline)

     (/ (+ (- B) (sqrt (raiz A B C))) (* 2 A))

     (newline)

     (/ (- (- B) (sqrt (raiz A B C))) (* 2 A)))

Verifique el código mediante el siguiente llamado:
(ceros 2 3 1)
En teoría, debía mandarme los resultados -1/2 y el resultado 1, justo en ese orden. Sin embargo sólo mostraba el resultado -1/2 y ahí acababa.
Solución implementada
Llegue a la conclusión que no podía hacer que Scheme mostrara dos resultados con la misma función, así que implemente la instrucción de display a la primera operación, de modo que el resultado lo implementara como un texto, y así poder pasar a calcular la segunda función y mostrarme el segundo resultado.
Efectivamente, así fue; ahora mi programa me muestra los dos valores de x. La función ahora quedo así:
(define
  (solucion A B C)
     (newline)

     (display (/ (+ (- B) (sqrt (raiz A B C))) (* 2 A)))

     (newline)

     (/ (- (- B) (sqrt (raiz A B C))) (* 2 A)))
Cualquier comentario o sugerencia, son bienvenidas.
También les comento que aquí les dejo los dos tutoriales en PDF sobre Scheme que me ayudaron para la realización de mi programa en cuestión de sintaxis.
Saludos a todos.

1 comentario: