E

egamboau

Usuario (Costa Rica)

Primer post: 22 dic 2009Último post: 30 jul 2012
2
Posts
42
Puntos totales
0
Comentarios
Lenguaje de Programación Scheme
Lenguaje de Programación Scheme
InfoporAnónimo12/22/2009

Scheme es, como es nombrado en el titulo, un lenguaje de programacion, del tipo funcional, de un tipado dinamico e interpretado, dialecto del LISP, que fue desarrllado en la decada de los 70's por Guy L. Steele y Gerald Jay Sussman, el cual se utiliza principalmente en la academia. Si bien es cierto es funcional, puede ser utilizado para simular otros paradigmas (como el conocido paradigma orientado a objetos utlizado en lenguajes como java o python) Es un lenguaje minimalista en todo sentido, teniendo dentro de si el menor numero posible de ordenes nativas, dando la opcion de crear funciones mas complejas a partir de estas por medio de abstracciones. Utiliza principalmente listas para el manejo de datos, ademas de los arrays. Como se menciono antes, este lenguaje no tiene una sintaxis definida para programar en diversos paradigmas, pero los mismos pueden ser "simulados" con las ordenes nativas del mismo. Sintaxis Scheme posee una sintaxis reducida comparado a otros lenguajes. Utiliza la notacion prefija. Por ejemplo, si se desea realizar la suma 1+1, se debe programar la siguiente instruccion (+ 1 1) Los parentesis son obligatorios, ya que separan las instrucciones de seran evaluadas por el interprete. Para realizar comentarios dentro del codigo, se utiliza el ";", asi se marca que toda la linea sera de comentario Ejemplo: ;Esta linea es un comentario, y la orden de abajo es ejecutada (+ 1 1) Variables locales y globales Las variables son, tal como mencione al principio, dinamicamente tipadas. Dicho de otra forma, no se ebe especificar lo que se va a guardar dentro de la misma. Las variables globales se nombran con la instruccion (define nombre valor) Por ejemplo, (define variable 5) Por otro lado, las variables locales se definen con la instruccion ( let variables funcion). Por ejemplo: ;sumar dos numeros guardados en una variable local (let ;variables de la operacion ((numero1 5) (numero2 7)) ;instruccion que suma los numeros, es decir, la funcion (+ numero1 numer2)) Creando Procedimientos Completos Utilizando la instruccion (define (nombre args) funcion) se crea un procedimiento dentro del programa. En mi caso, voy a implementar la instruccion del ejemplo anterior en una funcion ;funcion que suma dos numeros agregados como argumento (define (suma num1 num2) ;implementacion del let anterior, aunq no es estrictamente necesario (let ;variables de la operacion ((numero1 num1) (numero2 num2)) ;instruccion que suma los numeros, es decir, la funcion (+ numero1 numero2)) De la misma manera, el procedimiento anterior pudo ser escrito de esta manera: ;segunda implementacion de suma de dos numeros, esta vez, sin el let (define (suma num1 num2) (+ num1 num2)) para llamar a la funcion creada, se utiliza la orden (funcion args). Asi, para llamar a nuestra funcion de suma, se escribe: (suma 2 3) se llama con dos numeros, debido a que con esa cantidad de argumentos se establecio la funcion. Estructuras de control En Scheme existe la instruccion cond, con la cual se pueden revisar si se cumplen o no con requerimentos para realizar dicha funcion. Su sintaxis es: (cond ((condicion) (funcion-salida) .... .... .... (else (funcion-salida)) en este caso, el else es opcional por ejemplo, si se desea sumar solamente numeros positivos en nuestra funcion de suma, se podria realizar la siguiente implementacion ;funcion de suma, esta vez, aceptara solamente numeros positivos (define suma num1 num2) ;;manejo de las condiciones (cond ((and (> num1 0) (>num2 0)) (+ num1 num2)) (else "error al recibir parametros" ))) Manejo de valores booleanos En scheme se utiliza el #t como verdadero y el #f como falso. Tecnicamente, cualquier simbolo que no sea #f sera tomado por el interprete como #t. Para poder operarlos, existen las instrucciones AND, OR, NOT, de funcionamiento identico a los demas lenguajes de programacion. En el caso de AND, devolvera #t si y solo si ambos argumentos son verdaderos (and #t #t) OR devolvera #t si uno o ambos argumentos son verdaderos (or #t #f) NOT devolvera el complemento a su argumento (not #t) por ahora, es todo, espero haber explicado al menos los conceptos basicos del lenguaje. Para documentacion mas profunda o para descargar el interprete, pueden ir a http://www.plt-scheme.org/ Existen versiones para Mac, Linux y Windows Cualquier comentario sera de gran ayuda (este es mi primer post ) Fuentes: 1-Experiencia Personal (Estudiante de Ingenieria en Computacion) 2- http://es.wikipedia.org/wiki/Scheme

22
0
P
Paradigma de programación: Programación Lógica
Apuntes Y MonografiasporAnónimo7/30/2012

¿Que es un paradigma de programación? Generalmente, durante el desarrollo de aplicaciones de software, se encuentran con diversos problemas que deben ser solucionados de distintas formas, utilizando los distintos algoritmos que existan para su solucion, o implementando uno particular para un caso concreto. Estos pueden ser vistos desde diversos enfoques. Uno de los mas utilizados es el de la Orientación a Objetos, utilizado en lenguajes de programacion como Java, C# e incluso C++. Sin embargo, como sugiere el titulo, no solo este existe, sino que tambien hay otros que, de una u otra forma, simplifican la implementacion de ciertos algoritmos de solucion. Citando a Wikipedia: dijo:Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.[/quote] En este post, intentaré aclarar un paradigma algo distinto a lo que se esta acostumbrado normalmente, además daré un ejemplo de un lenguaje utilizado en el mismo Programación Lógica, ¿eso con que se come? En un principio, los lenguajes de programación eran muy relacionados con las operaciones de una máquina, es decir, operaciones aritméticas, acceso a memoria, apertura de archivos, entre otras funciones comunes de un computador. Estos programas pueden ocultar de cierta manera, su funcionalidad, pues su codigo puede ser bastante complejo y dificil de leer. En cambio, para una persona normal, es muy facil modelar un problema utilizando lógica matematica, ademas de que ayuda a que los programas sean mas legibles y su mantenimiento sea mas sencillo. El paradigma lógico de programación se basa en "premisas" que se dan a un universo, y basado en esas reglas (el cual se asumen como verdaderas) el programa responde un valor de verdad, concluido usando la lógica matematica. Un ejemplo de esto sería el siguiente: Se tienen los siguientes hechos: +las aves vuelan +los pingüinos no vuelan +"pichurri" es un ave +"sandokan" es un perro +"alegría" es un ave Ademas, la siguiente restriccion: +una mascota vuela si es un ave y no es un pingüino es posible preguntar al programa cosas como: +¿ "pichurri" vuela ? +¿ qué mascotas vuelan ? y el programa respondería +Es cierto que "pichurri" vuela. +"pichurri" y "alegría" vuelan. Este ejemplo es altamente simple, sin embargo, permite mostrar de manera muy básica el poder de este paradigma Prolog: Lenguaje de programación lógica Primeramente, me gustaria especificar que basaremos nuestra sintaxis en swi prolog, interprete gratuito que esta disponible en internet. la consola de prolog esta definida por el caracter '?' Nota: aun cuando existe un estandar ISO de prolog, este no contempla todo el lenguaje, e incluso algunos compiladores no lo siguen al pie de la letra, por lo que los codigos que ponga de ejemplo puede que no funcionen en otro editor Primero, como la mayoria de los lenguajes, se cuenta con una forma de introducir comentarios dentro del codigo. Esto se realiza con el signo %, y cubren toda una linea como un comentario. es decir: %esto es un comentario %esto tambien esto no las "variables" (entre comillas pues no es el concepto que se conoce como variable) pueden contener nombres alfanumericos, pero siempre deben empezar con una letra mayúscula o un guion bajo '_'. Por ejemplo: Variable %es una variable _var %es una variable var %no es una variable Ademas, existe una variable anonima, la cual puede tomar cualquier valor. Esta siempre será _, y se utiliza cuando haya un espacio que puede valer cualquier cosa, segun la clausula que se utilice. Los atomos, o simbolos, del lenguaje, son cualquier grupo de caracteres, una sucecion de signos de puntuacion, o cualquier expresion entre comillas simples. A esto tambien se le conoce como functor. Notese que las variables no son functores, sino que sirven como parametros a estos. para llamar a uno de los terminos, se utiliza la siguiente notacion: functor(argumento1,argumento2,...,argumentoN dependiendo del valor de N (el cual puede ser 0, en cuyo caso se omiten los parentesis) se le asigna una aridad al termino. Si el functor f tiene N argumentos, se utiliza la notacion f/N para indicar su aridad. Si N es 0, se dice que el termino es cerrado. Algo que tiene diferente el lenguaje respecto a otros es la forma de tratamiento de las variables. En cierto modo, no son variables como tales, pues solo tiene dos estados. Primero, al ser declaradas, se dice que estan "libres", es decir, sin un valor asignado. Sin embargo, una vez que se les da un valor, este no cambia, por lo que se dice que esta "ligada" Una variable puede contener cualquier tipo de valor. Este es, a grandes razgos, el mecanismo de unificacion de variables. Con un ejemplo se puede entender mejor: supongamos que declaramos un termino h/2, y lo utilizamos de la siguiente manera: h(X,3) y h(10, Z) Entonces se unifican los valores, a saber, X vale 10 y Z vale 3. Esto es por que hay una posible ligadura entre ambos valores. Este concepto se puede aplicar ademas, con dos variables. si se tiene un termino a/1, y se escribe como: a(X) y a(Y) los valores de X y Y quedaran ligados, es decir, es como escribir X=Y. Si X o Y se unifica a un valor, entonces la otra variable tambien tomara el mismo valor. En otras palabras, si X = Y y X = 2, se concluye que Y = 2 (recordemos que esto se basa en lógica matematica) Este mecanismo es muy complejo y poderoso. Algunas propiedades que tiene y que confunden a la mayoria: + Las variables pueden aparecer mas de una vez dentro de un termino. Es decir, se puede tenr F(C,C) y F('hola',D). Esto hace que C se ligue al valor 'hola'. Como C esta ligado a hola, entonces D tambien se liga a 'hola', pues D se liga a C por ser segundo argumento +Las variables no se unifican a valores distintos +las variables anonimas son distintas, es decir, a(_,_) y a(2,3) unifican En prolog, ademas de que las variables cambian, tambien cambia la forma de ejecucion de los programas. A continuacion, intentare explicar de manera entendible como se realiza esto. En prolog, las unidades que se pueden ejecutar se llaman predicados. En esecencia, son semejantes a funciones en lenguajes imperativos, como C. En lo que se diferencia es que en estos, no se devuelve un valor, sino que se tienen dos posibles resultados, Verdadero o Falso (true o false) Un objetivo (goal en inglés) es una llamada particular a un predicado En un goal, es posible utilizar variables libres como parametros, y el lenguaje devolvera todos los posibles valores que satisfacen la condicion que se quiere dar como verdadera. unos ejemplos tomados del tutorial en el que me baso para la estructura del post: El caso más básico es aquél que no contiene variables: son_hermanos('Juan','Maria'). Este objetivo sólamente puede tener una solución (verdadero o falso). Si utilizamos una variable libre: son_hermanos('Juan',X), es posible que existan varios valores para dicha variable que hacen cierto el objetivo. Por ejemplo para X = 'Maria', y para X = 'Luis'. También es posible tener varias variables libres: son_hermanos(Y,Z). En este caso obtenemos todas las combinaciones de ligaduras para las variables que hacen cierto el objetivo. Por ejemplo, X = 'Juan' y Z = 'Maria' es una solución. X = 'Juan' y Z = 'Luis' es otra solución. Dado que lo que estamos programando es logica, entonces es posible anidar objetivos utilizando conectivas, como lo son la conjuncion, la disyuncion y la negacion. Explico solo la conjuncion, que es la mas utilizada. el elemento que se utiliza para separar clausulas es la ',' la cual se interpreta como un "y". Pueden utilizarse variables libres, sin embargo, hay que tomar en cuenta el orden de ejecucion para las ligaduras. si algun objetivo retorna false, se detiene la ejecucion (al ser conjuncion, si una parte falla, todo fallará). Ya con esto un poco claro (espero) es prudente ver un programa real, para poder analizar la estructura del codigo. Iré explicando cada una de las partes. Primeramente, se tienen un grupo de clausulas, que se utilizarán para las demostraciones. cada una de esta se separa por un cambio de linea, y son terminadas por un '.' Recordar que el orden es significativo. el formato de estas son: cabeza :- ojetivo1, ojetivo2, ..., ojetivoN. El operador ':-' es como el operador "implica" en la logica matematica, Un ejemplo de esto es: es_viejo(Individuo) :- edad(Individuo,Valor), Valor > 60. Es posible eliminar el cuerpo de una clausula, lo que la hace un "hecho" y se asume como verdadero siempre. De manera muy básica, esta es la explicacion del paradigma, ademas de principios del lenguaje. Existen muchos documentos en internet, lo que quise hacer es dar una especie de guia o de inicio, por eso no me adentre tanto en los detalles del lenguaje. Cualquier duda que tengan, con gusto intentaré responderla de la mejor manera.

20
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.