Hack x Crack - Comunidad de Seguridad informática

Programación => Otros => Mensaje iniciado por: kenkeiras en Enero 07, 2012, 06:17:47 pm

Título: Catálogo de lenguajes de programación
Publicado por: kenkeiras en Enero 07, 2012, 06:17:47 pm
Visto que el tema de por que lenguaje de programación empezar ya es algo recurrente en la comunidad, me he decidido a hacer una recopilación de mini programas en distintos lenguajes para que quien comience pueda encontrar facilmente uno que se acerce a su forma de ver las soluciones de los problemas (personalmente creo que es un buen criterio para escojer un primer lenguaje).

 Para no quedarse en los 4 de siempre me he tomado la libertad en escojer unos cuantos lenguajes que no suelen tener tanta visibilidad (sin ser tipo brainf*ck), he intentado también ser todo lo imparcial posible pero como humano que soy eso no es algo que suela salir bien  ;).

 Por ahora contiene alrededor de 30 lenguajes, pero solo un código de cada uno, así que aún queda mucho por andar, los códigos serían:
Y seguramente uno o dos más que estan sin decidir.
Nota: Este es un trabajo en curso, cualquier aportación es enormemente bienvenida. Todo el código se encuentra bajo la licencia WTFPL en este repositorio [ https://gitorious.org/language-catalog/language-catalog (https://gitorious.org/language-catalog/language-catalog) ]. Además todos los lenguajes que se encuentran aquí disponen de algún intérprete o compilador libre.



A+
A+ es un lenguaje de programación de arrays (https://en.wikipedia.org/wiki/Array_programming_language) descendiente del lenguaje A, diseñado este para sustituir a APL (https://es.wikipedia.org/wiki/APL), fue diseñado para programas con muy centradas en los números, especialmente para las aplicaciones financieras.
 Como curiosidad comentar que el lenguaje suele utilizarse con un editor y una fuente especiales, lo que permite escribir código casi como ecuaciones matemáticas, aunque también es posible sustituir los símbolos por caracteres ASCII, como en el ejemplo. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/a+/fibonacci_recursivo.ap)
Código: [Seleccionar]
$mode ascii

fibonacci n: if (n < 2) n else (fibonacci(n - 1)) + (fibonacci(n - 2))
 
numero := 10
resultado := fibonacci numero

'<Elemento nº >,I2,< de fibonacci: >,I5' _fmt (numero; resultado)

sys.exit 0



Ada
Ada es un lenguaje orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos) y concurrente (https://es.wikipedia.org/wiki/Programaci%C3%B3n_concurrente) diseñado por encargo del Departamente de Defensa de los EEUU, se utiliza principalmente en entornos que requiren mucha seguridad y fiabilidad. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/ada/fibonacci_recursivo.adb)
Código: [Seleccionar]
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
 
procedure Fibonacci_Recursivo is
    function Fibonacci(n : in Integer) return Integer is
    begin
            if n < 2 then
                return n;
            else
                return Fibonacci(n - 1) + Fibonacci(n - 2);
            end if;
    end Fibonacci;


    Numero : Integer := 10;
    Resultado : Integer := Fibonacci(Numero);

begin

    Put_Line(Item => "Elemento nº" & Integer'Image (Numero) &
                     " de fibonacci:" & Integer'Image(Resultado));
 
end Fibonacci_Recursivo;



Assembler (ensamblador)
El lenguaje ensamblador es el lenguaje más cercano a la máquina, sus códigos se traducen directamente a binario, lo que permite un control total sobre las operaciones dando la posibilidad de afinarlo para obtener el mejor rendimiento a costa de no tener ninguna capa de abstracción.
Una consecuencia lógica es que el código no es portable entre sistemas operativos ni distintas arquitecturas de procesador, el ejemplo se probó en Gnu/Linux en un x86, ensamblado con NASM. (por comodidad utiliza la librería de C para mostrar el resultado por pantalla)[fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/asm/fibonacci_recursivo_linux_x86.asm)
Código: [Seleccionar]
[bits 32]
section .data
    numero: dd 10
    format_string: db 'Elemento nº %i de fibonacci: %i', 10, 0

section .text

global main
extern printf

; pasaremos el parametro por eax
fibonacci:
    ; solo hay cambios si eax es menor que 2
    cmp eax, 2
    jl .fibonacci_done

    ; Si n >= 2
    ;  a = fibonacci(n - 1)
    push dword eax ; guardamos n
    dec eax        ; le restamos 1
    call fibonacci ; llamamos a fibonacci
    pop ebx        ; recuperamos el original en ebx

    ;  b = fibonacci(n - 2)
    push eax       ; guardamos fibonacci(n - 1)
    mov eax, ebx   ; pasamos el original a eax
    sub eax, 2     ; le restamos 2
    call fibonacci ; llamamos a fibonacci
    pop ebx        ; recuperamos el original

    ; a + b
    add eax, ebx   ; y los sumamos

.fibonacci_done:
    ret


main:
    mov eax, [numero]
    call fibonacci

    ; a C los parametros se le pasan al reves
    push dword eax            ; resultado
    push dword [numero]       ; numero
    push dword format_string  ; "Elemento nº %i de fibonacci: %i\n"
    call printf

; exit_syscall, se llama al kernel para salir
    mov eax, 1
    mov ebx, 0
    int 0x80



Bash
Bash es realmente un lenguaje de intérprete de comandos, por ello no es un lenguaje prominente en la manipulación de datos, en cambio si el problema se puede resolver encadenando otros programas se convierte en una solución extremadamente potente.
 Es importante tener en cuenta que Bash es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo UNIX. También se ha portado a Microsoft Windows por el proyecto Cygwin. (Wikipedia (https://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/Conceptos_e_Historia_de_BASH)). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/bash/fibonacci_recursivo.sh)
Código: [Seleccionar]
fibonacci(){
    if [ $1 -lt 2 ];then
        echo $1;
    else
        echo $(( `fibonacci $(( $1 - 1 ))` + `fibonacci $(( $1 - 2 ))` ));
    fi
}

numero=10
resultado=`fibonacci $numero`

echo "Numero $numero de fibonacci: $resultado"



BASIC
BASIC es un lenguaje de progamación estructurado (https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada) diseñado en los '60 como una herramienta de enseñanza para los principiantes. Fue una vez un lenguaje importante en la programación sobre Windows, pero últimamente está siendo desplazado poco a poco por C#.
El lenguaje sufrió una cierta fragmentación, el ejemplo esta probado con Yabasic (https://es.wikipedia.org/wiki/YaBasic). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/basic/fibonacci_recursivo.yab)
Código: [Seleccionar]
sub fibonacci(n)
  if n < 2 then
      return n
  else
      return (fibonacci(n - 1) + fibonacci(n - 2))
  endif
end sub

numero = 10
resultado = fibonacci(numero)

print "Elemento nº ", numero, " de fibonacci: ", resultado



C
C es un lenguaje de programación que a diferencia del resto de los que se presentan aquí, considerados de alto nivel (https://es.wikipedia.org/wiki/Alto_nivel), se observa como de medio nivel (https://es.wikipedia.org/wiki/Lenguaje_de_medio_nivel) ya que aunque presenta construcciones propias de lenguajes de alto nivel también permite ejercer un contro de bajo nivel.
 Es uno de los lenguajes más utilizados en la programación de entornos Unix, y el lenguaje de facto en el desarrollo de sistemas operativos. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/c/fibonacci_recursivo.c)
Código: [Seleccionar]
#include <stdio.h>

int fibonacci(int n){
    if (n < 2){
        return n;
    }
    else{
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int main(){
    int numero = 10;
    int resultado = fibonacci(numero);

    printf("Elemento nº %i de fibonacci: %i\n", numero, resultado);

    return 0;
}



C#
C# es un lenguaje orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos) desarrollado por Microsoft para la plataforma .NET (https://es.wikipedia.org/wiki/Microsoft_.NET). Es un lenguaje en el que se puede observar la sintaxis de la familia C y el modelo fuertemente orientado a objetos de Java.
Existe una implementación libre que permite ejecutar el código C# sobre distintos sistemas operativos, Mono (https://es.wikipedia.org/wiki/Proyecto_Mono). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/c%23/fibonacci_recursivo.cs)
Código: [Seleccionar]
using System;
 
class Program{

    static int fibonacci(int n){
        if (n < 2){
            return n;
        }
        else{
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }

    static void Main(){
        int numero = 10;
        int resultado = fibonacci(numero);
        Console.Write("Elemento nº ");
        Console.Write(numero);
        Console.Write(" de fibonacci: ");
        Console.WriteLine(resultado);
    }
}



Common Lisp
Common Lisp no es realmente un lenguaje de programación, sinó una especificación que estandariza el lenguaje Lisp,  normalmente utilizado en la investigación de IA y el desarrollo rápido de aplicaciones.
Como anécdota sobre la potencia del debugger de Lisp se cuenta el caso de la sonda Deep Space 1 (https://es.wikipedia.org/wiki/Deep_Space_1) donde un programa en Lisp controlaba una secuencia de experimentos, y medio año después del lanzamiento, a 160 millones de Kilometros de la Tierra, un equipo fue capaz de diagnosticar y corregir sobre la marcha un escurridizo fallo que no había aparecido durante las pruebas en la tierra. (Practical Common Lisp (http://www.gigamonkeys.com/book/lather-rinse-repeat-a-tour-of-the-repl.html)). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/common_lisp/fibonacci_recursivo.lisp)
Código: [Seleccionar]
(defun fibonacci (n)
  (if (< n 2)
      n
      (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))

(defvar numero 10)
(defvar resultado (fibonacci numero))
(format t "Numero ~D de fibonacci: ~D~%" numero resultado)



Dart
Dart es un lenguaje de programación estructurado (https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada) diseñado por Google como un lenguaje de programación web en el lado del cliente, como un intento de actualizar el panorama de la programación web en el cliente dominado por Javascript.
Es un lenguaje que aunque aún no ha sido implementado en ningún navegador (excepto quizá chrome), pero puede ser convertido a código Javascript. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/dart/fibonacci_recursivo.dart)
Código: [Seleccionar]
int fibonacci(int n) {
    if (n < 2){
        return n;
    }
    else{
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

main() {
  int numero = 10;
  int resultado = fibonacci(numero);
  // ó print('Elemento nº ${numero} de fibonacci: ${fibonacci(numero)');
  print('Elemento nº ${numero} de fibonacci: ${resultado}');
}



Erlang
Erlang es un lenguaje de programación concurrente (https://es.wikipedia.org/wiki/Programaci%C3%B3n_concurrente) desarrollado por Ericsson para realizar aplicaciones distribuidas, tolerantes a fallos, soft-real-time y de funcionamiento ininterrumpido. (Wikipedia (https://es.wikipedia.org/wiki/Erlang)).
Es un lenguaje funcional (https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional), un paradigma que pretende acercarse a la lógica formal a través de variables no mutables ('X' siempre tiene el mismo valor) y evitar funciones con efectos secundarios (que la llamada a una función tenga algun efecto en el programa mas que el valor que devuelve). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/erlang/fibonacci_recursivo.erl)
Código: [Seleccionar]
-module(fibonacci_recursivo).
-export([start/0, fibonacci/1]).

fibonacci(0) -> 0;
fibonacci(1) -> 1;
fibonacci(N) -> fibonacci(N - 1) + fibonacci(N - 2).


start() ->
     Numero = 10,
     Resultado = fibonacci(Numero),
     io:format("Elemento nº ~p de fibonacci: ~p~n", [Numero, Resultado]).



Factor
Factor es un lenguaje de programación orientado a pila (https://en.wikipedia.org/wiki/Stack-oriented_programming_language), esto es: para hacer una operación se introducen los datos en una pila global y después se llama a una función, por ejemplo para sumar dos números haríamos '10 20 +', añadiendo primero el 10 a la pila, después el 20 y a continuación llamando a la operación suma.
 Aunque realmente es posible hacer operaciones con datos sin seguir ese esquema a través de llamadas a funciones o dentro de una misma función. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/factor/fibonacci_recursivo.factor)
Código: [Seleccionar]
USING: kernel math formatting ;
IN: fibonacci_recursivo

: fibonacci ( int -- int ) dup 2 < [ [ 1 - fibonacci ] [ 2 - fibonacci ] bi + ] unless ;

10
dup
fibonacci

"Elemento nº %d de fibonacci: %d" printf



FORTRAN
Fortran es un lenguaje de programación que pone especial énfasis en el cálculo numérico, fue uno de los primeros lenguajes de programación que no se limitó a poner mnemónicos a instrucciones del procesador.
Fortran se utiliza en la programación de alto rendimiento y los test de rendimiento de los supercomputadores. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/fortran/fibonacci_recursivo.f95)
Código: [Seleccionar]
! Escrito para Fortran 95
PROGRAM fibonacci_recursivo
    IMPLICIT NONE
    INTEGER :: numero = 10, resultado
    resultado = fibonacci(numero)
   
    PRINT *, "Elemento nº ", numero, " de fibonacci: ", resultado

CONTAINS

RECURSIVE FUNCTION fibonacci(n) RESULT (r)
    INTEGER :: n, r

    IF (n < 2) THEN
        r = n
    ELSE
        r = fibonacci(n - 1) + fibonacci(n - 2)
    END IF
END FUNCTION fibonacci

END PROGRAM fibonacci_recursivo



Genie
Genie es un lenguaje desarrollado por el proyecto GNOME (https://en.wikipedia.org/wiki/GNOME) como un dialecto más simple y limpio para el compilador de vala, manteniendo las funcionalidades de ese lenguaje.
Dado que Genie es fundamentalmente una representación alternativa del código vala, se pueden usar funciones, clases y demás de uno en el otro. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/genie/fibonacci_recursivo.gs)
Código: [Seleccionar]
def fibonacci(n: int): int
if n < 2 do
return n
else
return fibonacci(n - 1) + fibonacci(n - 2)

init
var numero = 10
var resultado = fibonacci(numero)
print "Elemento nº %i de fibonacci: %i", numero, resultado



Go
Desarrollado en Google, Go es un lenguaje de programación concurrente (https://es.wikipedia.org/wiki/Computaci%C3%B3n_concurrente) pensado para ofrecer la eficiencia de un lenguaje con tipado estático (https://es.wikipedia.org/wiki/Tipado_est%C3%A1tico#Tipado_est.C3.A1tico) y la facilidad de programación de un lenguaje con tipado dinámico (https://es.wikipedia.org/wiki/Tipado_din%C3%A1mico).
Curiosamente utiliza distintos nombres para el compilador (https://es.wikipedia.org/wiki/Compilador) y el enlazador (https://es.wikipedia.org/wiki/Enlazador) según la arquitectura de la CPU.No confundir con el lenguaje Go! (https://en.wikipedia.org/wiki/Go!_%28programming_language%29). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/google_go/fibonacci_recursivo.go)
Código: [Seleccionar]
package main

import "fmt"

func fibonacci(n int)(r int){
    if (n < 2){
        r = n
    }else{
        r = fibonacci(n - 1) + fibonacci(n - 2)
    }
    return
}

func main() {
    numero := 10
    resultado := fibonacci(numero)
    fmt.Printf("Elemento nº %v de fibonacci: %v\n", numero, resultado)
}



Haskell
Haskell es un lenguaje funcional (https://es.wikipedia.org/wiki/Paradigma_funcional) puro.
A pesar de que por su constitucion pueda parecer lo contrario es posible utilizarlo para, por ejemplo, programar gestores de ventanas, como Xmonad (https://en.wikipedia.org/wiki/Xmonad). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/haskell/fibonacci_recursivo.hs)[branching] (https://gitorious.org/language-catalog/language-catalog/blobs/master/haskell/branching.hs)[sintaxis] (https://gitorious.org/language-catalog/language-catalog/blobs/master/haskell/syntax.hs)
Código: [Seleccionar]
import Text.Printf

fibonacci 0 = 0
fibonacci 1 = 1
fibonacci n = fibonacci(n - 1) + fibonacci (n - 2)

main = do
    let numero = 10
    let resultado = fibonacci numero
    printf "Elemento nº %i de fibonacci: %i\n" (numero::Int) (resultado::Int)



Java
Java es un lenguaje de programación fuertemente orientado a objetos (https://es.wikipedia.org/wiki/Orientado_a_objetos) desarrollado por Sun, hasta el punto de que todo en el programa es un objeto. Es un lenguaje que se utiliza para programación de teléfonos móviles, desde los clásicos con Java SE hasta smartphones Android.
Algo muy destacable de java es una enorme librería estándar (en la versión normal, no SE), que abarca desde funciones de criptografía a protocolos como HTTP (https://es.wikipedia.org/wiki/HTTP). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/java/fibonacci_recursivo.java)
Código: [Seleccionar]
class fibonacci_recursivo{
    static int fibonacci(int n){
        if (n < 2){
            return n;
        }
        else{
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }

    public static void main(String argv[]){
        int numero = 10;
        int resultado = fibonacci(numero);

        System.out.println("Elemento nº "+ numero +" de fibonacci: " + resultado);

    }
}



Javascript
Javascript (que no tiene nada que ver con Java, de hecho se llamaba originalmente ECMAscript) es el lenguaje de programación web en lado de cliente, terrento en el que no tiene ningún competidos exceptuando el reciente Dart, que aún está en desarrollo.
Además en 2009 comenzó el desarrollo de la ya madura plataforma node.js (https://en.wikipedia.org/wiki/Node.js) que permite utilizarlo en una arquitectura orientada a eventos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_dirigida_por_eventos) muy práctica para la programación de servidores.  [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/javascript/fibonacci_recursivo.js)
Código: [Seleccionar]
function fibonacci(n){
    if (n < 2){
        return n;
    }
    else{
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

var numero = 10;
var resultado = fibonacci(numero);

// Esto cambia segun el entorno, para webs
//document.write("Elemento nº "+ numero +" de fibonacci: "+resultado+"<br />");

// Para nodejs
process.stdout.write("Elemento nº "+ numero +" de fibonacci: "+resultado+"\n");



Logo
Logo es un lenguaje de programación diseñado como lenguaje de fácil aprendizaje, es especialmente conocido por que soporta de forma estándar los gráficos de tortuga (https://es.wikipedia.org/wiki/Gr%C3%A1ficas_tortuga), es decir, permite usar una "tortuga" a la que se le dan una serie de pasos a seguir (Avanza 10, Gira a la derecha, ...) y que deja un trazo como lo haría un lápiz, para hacer dibujos.
Hay varios intérpretes que permiten escribir las instrucciones en otros idiomas a parte del inglés, por ejemplo "Avanza" en vez de "Forward" o "Gira a la derecha" en vez de "Rotate right". [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/logo/fibonacci_recursivo.logo)
Código: [Seleccionar]
TO fibonacci :n
    if :n < 2 [output :n]
              output sum fibonacci difference n 2 fibonacci difference n 1
end

make "numero 10
make "resultado fibonacci :numero

print (word "Elemento\ nº\  :numero "\ de\ fibonacci:\  :resultado)

BYE



Lua
Lua es un lenguaje de scripting (https://es.wikipedia.org/wiki/Script) que por su sencillez se suele utilizar como lenguaje que interpretan los motores de programas grandes como juegos, escritos normalmente en lenguajes de más bajo nivel.
Además se puede utilizar para programar aplicaciones no oficiales en Wii y PSP, el gestor de ventanas AWESOME utiliza sus scripts como archivos de configuración y como lenguaje para extender juegos. (Lua uses (http://lua-users.org/wiki/LuaUses)). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/lua/fibonacci_recursivo.lua)
Código: [Seleccionar]
function fibonacci(n)
    if n < 2 then
        return n
    else
        return fibonacci(n - 1) + fibonacci(n - 2)
    end
end

numero = 10
resultado = fibonacci(numero)

io.write(string.format("Elemento nº %i de fibonacci: %i\n", numero, resultado))



Objective C
Objective C es un lenguaje de programación orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos) creado como una extension del lenguaje C.
Es el principal lenguaje de programación en Mac OS X e IPhone, pero también es posible utilizarlo en otras plataformas. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/objective-c/fibonacci_recursivo.m)
Código: [Seleccionar]
#import <stdio.h>

int fibonacci(int n){
    if (n < 2){
        return n;
    }
    else{
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int main(){
    int numero = 10;
    int resultado = fibonacci(numero);

    printf("Elemento nº %i de fibonacci: %i\n", numero, resultado);

    return 0;
}



Ocaml
Ocaml es un lenguaje de la familia ML (https://es.wikipedia.org/wiki/ML) que permite los paradigmas de programación funcional (https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional), imperativa (https://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa) (se describen los pasos a realizar) y orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/ocaml/fibonacci_recursivo.ml)
Código: [Seleccionar]
let rec fibonacci n = if n < 2 then n
                      else fibonacci (n - 1) + fibonacci(n - 2)
in
let numero = 10 in
let resultado = fibonacci numero in
print_string "Elemento numero "; print_int numero;
print_string " de fibonacci: ";  print_int resultado; print_newline();;



Octave
Octave es un programa y lenguaje de programación de alto nivel diseñado para realizar análisis numérico.
Se puede considerar la alternativa libre a MATLAB, con el que mantiene cierta compatibilidad. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/octave/fibonacci_recursivo.oct)
Código: [Seleccionar]
function ret = fibonacci(n)
   if (n < 2)
      ret = n;
   else
      ret = fibonacci(n - 1) + fibonacci(n - 2);
   end
end

numero = 10;
resultado = fibonacci(numero);
printf("Elemento nº %i de fibonacci: %i\n", numero, resultado);



Pascal
Pascal es un lenguaje de programación estructurado (https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada) diseñado con el objetivo de crear un lenguaje que facilitase el aprendizaje de la programación.
Hay un cierto número de dialectos bastante compatibles, el compilador utilizado en este ejemplo es FreePascal, pero debería funcionar sobre cualquiera que respete el estándar básico. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/pascal/fibonacci_recursivo.pas)
Código: [Seleccionar]
program fibonacci_recursivo;

function fibonacci(n: integer): integer;
    var r: integer;
begin
    if (n < 2) then
        r := n
    else
        r := fibonacci(n - 1) + fibonacci(n - 2);
    fibonacci := r;
end;

var
    numero, resultado: integer;

begin
    numero := 10;
    resultado := fibonacci(numero);
    writeln('Elemento nº ', numero, ' de fibonacci: ', resultado);
end.



Perl
Perl es un lenguaje de scripting desarrollado para la manipulación de textos que provee de una gran flexibilidad, cuenta con un repositorio de módulos central, CPAN (https://es.wikipedia.org/wiki/CPAN) que aloja código para programar compresores, servidores, web, interfaces gráficas, utilidades de red...
Es un lenguaje que ganó fama de ser poco legible precisamente por la libertad que da al programador pero en última instancia la claridad del código depende solo de quien lo escribe. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/perl/fibonacci_recursivo.pl)
Código: [Seleccionar]
sub fibonacci{
    my $n = $_[0];
    if ($n < 2){
        return $n;
    }
    else{
        return fibonacci($n - 1) + fibonacci($n - 2);
    }
}

my $numero = 10;
my $resultado = fibonacci($numero);

print "Elemento nº $numero de fibonacci: $resultado\n";



PHP
PHP es un lenguaje de programación web del lado del servidor (aunque es posible utilizarlo en aplicaciones que no lo sean) siendo uno de los más utilizados, y normalmente el único lenguaje que suelen soportar los alojamientos web gratuitos.
 Es un lenguaje especialmente diseñado para poder mezclarse con código HTML (https://es.wikipedia.org/wiki/HTML) de forma cómoda. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/php/fibonacci_recursivo.php)
Código: [Seleccionar]
<?php
    
function fibonacci($n){
        if (
$n 2){
            return 
$n;
        }
        else{
            return 
fibonacci($n 1) + fibonacci($n 2);
        }
    }

$numero 10;
$resultado fibonacci($numero);

echo 
"Elemento nº $numero de fibonacci: $resultado\n";
?>




Python/Python3
Python es un lenguaje de programación multiparadigma (https://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_multiparadigma) que puede ser usada como lenguaje de scripting, o para la programación web.
 De python suele llamar la atención el hecho de los bloques del programa se definen a través de la indentación (es decir, con espacios en blanco al principio de la línea), al contrario que en otros que se delimitan con simbolos '{', '}' o palabras clave 'begin', 'end', esto hay quien lo considera un estorbo y hay quien piensa que es una buena forma de forzar a escribir código legible.
La versión ultima versión, 3, añade unos cambios que no son compatibles hacia atrás (http://docs.python.org/release/3.0.1/whatsnew/3.0.html). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/python/fibonacci_recursivo.py)
Código: [Seleccionar]
def fibonacci(n):
    if n < 2:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


numero = 10
resultado = fibonacci(numero)

# En python2
print "Elemento numero", numero, "de fibonacci:", resultado

# En python3
print ("Elemento numero", numero, "de fibonacci:", resultado)



R
R es un entorno y un lenguaje de programación orientado a objetos (https://es.wikipedia.org/wiki/Orientaci%C3%B3n_a_objetos) pensado para el análisis estadístico.
 Además el código en R puede ser invocado desde otros lenguajes como Perl y Python. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/r/fibonacci_recursivo.r)
Código: [Seleccionar]
fibonacci <- function(n){
    return (ifelse (n < 2, n, fibonacci(n - 2) + fibonacci(n - 1)))
}

numero <- 10
resultado <- fibonacci(numero)

s <- sprintf("Elemento nº %i de fibonacci: %i", numero, resultado)
print(s)



Ruby
Ruby es un lenguaje de programación reflexivo (https://es.wikipedia.org/wiki/Reflexi%C3%B3n_(inform%C3%A1tica)) y orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos).
 Es un lenguaje que ha tomado mucha fuerza en la comunidad de programación web gracias al framework Ruby On Rails (https://es.wikipedia.org/wiki/Ruby_on_Rails). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/ruby/fibonacci_recusivo.rb)
Código: [Seleccionar]
def fibonacci(n)
    if n < 2
        return n
    else
        return fibonacci(n - 1) + fibonacci(n - 2)
    end
end

numero = 10
resultado = fibonacci numero

print "Elemento n ", numero, " de fibonacci: ", resultado, "\n"



Scala
Scala es un lenguaje de programación funcional (https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional) orientado a objetos (https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos) que funciona sobre la máquina virtual de java. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/scala/fibonacci_recursivo.scala)
Código: [Seleccionar]
def fibonacci(n: Int): Int = if (n < 2) n
                             else fibonacci(n - 1) + fibonacci(n - 2)

val numero = 10
val resultado = fibonacci(numero)

Console.printf("Elemento nº %s de fibonacci: %s\n", numero, resultado)



Scheme
Scheme es un dialecto minimalista de Lisp.
 El estándar de Scheme es realmente minimalista y específico en sí. Ello provoca que existan multitud de implementaciones diferentes, cada una de las cuales introduce extensiones y bibliotecas propias que las hace incompatibles entre sí. Los Scheme Requests for Implementation (SRFI) tratan de poner remedio a este problema. (Wikipedia (https://es.wikipedia.org/wiki/Scheme#Desventajas_de_Scheme)). [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/scheme/fibonacci_recursivo.scm)
Código: [Seleccionar]
(define (fibonacci n)
 (if (< n 2)
  n
  (+ (fibonacci (- n 2)) (fibonacci (- n 1)))
 )
)

(define numero 10)
(define resultado (fibonacci numero))

(display "Elemento nº"    )
(display numero           )
(display " de fibonacci: ")
(display resultado        )
(newline                  )



Tcl
Tcl es un lenguaje de scripting utilizado para el desarrollo de prototipos y de interfaces gráficas.
 En su momento consiguió cierta popularidad gracias al plugin Expect (https://en.wikipedia.org/wiki/Tcl#Expect) que permitia automatizar tareas sobre herramientas como FTP, Telnet o SSH. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/tcl/fibonacci_recursivo.tcl)
Código: [Seleccionar]
proc fibonacci n {
    if { $n < 2 } {
        return $n
    } else {
        return [expr [fibonacci [expr $n - 1]] + [fibonacci [expr $n - 2]]]
    }
}

set numero 10
set resultado [fibonacci $numero]
puts [format "Elemento nº %i de fibonacci: %i" $numero $resultado]



Unicon
Unicon es un lenguaje de programación orientado a objetos (https://en.wikipedia.org/wiki/Object-oriented_programming) de muy alto nivel (https://en.wikipedia.org/wiki/Very_high-level_programming_language) descendiente de Icon (https://en.wikipedia.org/wiki/Icon_programming_language), siendo ambos especiamente útiles para tratar con cadenas de texto. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/unicon/fibonacci_recursivo.icn)
Código: [Seleccionar]
procedure fibonacci(n)
    if (n < 2) then
        return n
    else
        return fibonacci(n - 1) + fibonacci(n - 2);
end

procedure main()
    numero := 10
    resultado := fibonacci(numero)
    write( stdout, "Elemento nº ", numero, " de fibonacci: ", resultado)
end



Vala
Vala es un lenguaje orientado a objetos (https://en.wikipedia.org/wiki/Object-oriented) desarrollado por el proyecto GNOME (https://live.gnome.org/Vala) como un lenguaje con las posibilidades de un lenguaje actual sin necesidad de librerías de runtime a mayores que las de C y con un coste adicional mínimo.
Vala se compila a código C, por ello es posible utilizar librerías y recursos escritos en este lenguaje. [fibonacci_recursivo] (https://gitorious.org/language-catalog/language-catalog/blobs/master/vala/fibonacci_recursivo.vala)
Código: [Seleccionar]
int fibonacci(int n){
    if (n < 2){
        return n;
    }
    else{
        return fibonacci(n - 2) + fibonacci(n - 1);
    }
}

void main(){
     int numero = 10;
     int resultado = fibonacci(numero);

     stdout.printf("Elemento nº %i de fibonacci: %i\n",numero, resultado);
}



Que aproveche   ;)
Título: Re:Catálogo de lenguajes de programación
Publicado por: MsRonicolas en Enero 07, 2012, 06:49:43 pm
Super, Gracias Ken
Título: Re:Catálogo de lenguajes de programación
Publicado por: Libereco en Enero 07, 2012, 08:25:53 pm
Muchas gracias por el aporte, me lo he leído entero, muy interesante.
Título: Re:Catálogo de lenguajes de programación
Publicado por: adri92 en Enero 07, 2012, 09:02:41 pm
EDITO: jajajajajaja me he equivocado de hilo al contestar, que tenia varios abierto xDDDDDDDD

Que empanadaj ajajajjajaa xD

PD: aprovecho para preguntar... tantos lenguajes de programación hay?  :o :o :o :o
Título: Re:Catálogo de lenguajes de programación
Publicado por: piou en Enero 07, 2012, 09:53:43 pm
Muy buena lista.
Título: Re:Catálogo de lenguajes de programación
Publicado por: Libereco en Enero 07, 2012, 09:59:19 pm
PD: aprovecho para preguntar... tantos lenguajes de programación hay?  :o :o :o :o

Esto es una recopilación, pero hay más.
Título: Re:Catálogo de lenguajes de programación
Publicado por: deivid en Enero 07, 2012, 10:03:58 pm
Demaciados y aun falta, aunque lo bueno es que algunos tienen mucho en comun, entonces desde que sepas c++, seguro el resto no te costaran tanto como te costo aprender c++.

Buen aporte :P
Título: Re:Catálogo de lenguajes de programación
Publicado por: Shama| en Enero 07, 2012, 11:43:05 pm
wooow ! buena recopilacion, se me han acado unas dudas que tenia, gracias.

Saludos !!
Título: Re:Catálogo de lenguajes de programación
Publicado por: overload en Enero 08, 2012, 12:15:04 am
Algunos lenguajes no los conocía la verdad :P, buena recopilación!
Título: Re:Catálogo de lenguajes de programación
Publicado por: WinDeath en Enero 08, 2012, 12:54:27 am
Gracias por dedicar tu tiempo a presentar esta recopilación. Buena info.

WD
Título: Re:Catálogo de lenguajes de programación
Publicado por: kenkeiras en Enero 08, 2012, 05:04:12 pm
Gracias a todos por el apoyo  ;D
Título: Re:Catálogo de lenguajes de programación
Publicado por: Sensei en Enero 08, 2012, 05:08:59 pm
Muy buena info kenkeiras, yo siempre suelo intentar echar una mano orientando minimamente cuando preguntaban sobre que lenguaje escoger pero sin duda con esto seguro que a un gran nº de ellos los sacas de dudas.

Un saludo!
Título: Re:Catálogo de lenguajes de programación
Publicado por: Kesmek'J en Febrero 23, 2012, 06:03:52 pm
Muy  Bueno Vi Lenguaje Que Ni yo Conocia :)

Este tema tiene que estar fijado :)
Título: Re:Catálogo de lenguajes de programación
Publicado por: kfe en Abril 03, 2012, 08:25:42 pm
 :o de lokura SORPRENDENTE TU APORTE

Título: Re:Catálogo de lenguajes de programación
Publicado por: Morbo en Abril 03, 2012, 09:06:31 pm
Exelente forma de mostrar los lenguajes, algo que me llamo mucho la atencion fue el gran parecido de unos a otros siendo que tienen vaces diferentes que afinla de cuentas es la misma..
Título: Re:Catálogo de lenguajes de programación
Publicado por: WhiZ en Mayo 19, 2012, 09:10:32 am
Q copado! Es cierto que muchos se parecen.
Por ahora manejo python y estoy aprendiendo C++, pero encuentro muchos lenguajes parecidos.
Lo voy a tener en cuenta en el futuro para aprender nuevos lenguajes!
Gracias por el aporte!
Título: Re:Catálogo de lenguajes de programación
Publicado por: ravenheart en Mayo 19, 2012, 09:46:51 am
Pues sin ánimo de echar por tierra la labor de Kenkeiras, yo no veo de qué le va a servir esto a un novato que esté intentando decidirse por un lenguaje; en todo caso le confundirá aún más.

Si se trata de orientar a los novatos, yo me limitaría a un puñado de lenguajes populares y modernos, quizá Asm, Bash, Batch, C, C++, C#, Java, Perl, PHP, Python, Vb.Net, y si queremos sentirnos halternatibos Haskell, Lua, Prolog, Scheme y Ruby (En serio, ¿Fortran? ¿Logo? ¿Basic? WTF?). En fin, cosas modernas o que al menos se usen en la actualidad, de las que se pueda encontrar mucha documentación...

Además, más útil que poner tres o cuatro mini ejemplos de código (que no digo que esté mal) y una descripción que parece sacada de la Wikipedia, sería explicar lo que se puede esperar de cada lenguaje, sus ventajas e inconvenientes.

Citar
Haskell es un lenguaje funcional puro.
A pesar de que por su constitucion pueda parecer lo contrario es posible utilizarlo para, por ejemplo, programar gestores de ventanas, como Xmonad.
¿En serio esto está orientado a novatos?

En otro orden de cosas, no sé por que no están C++ (que no es lo mismo que C por mucho que la gente tenga la manía de ponerlos juntos, como si fueran lo mismo) ni Visual Basic, ni Visual Basic.Net (que ni son el mismo lenguaje, ni se parecen al Basic original, que por cierto, ya nadie usa).
Título: Re:Catálogo de lenguajes de programación
Publicado por: hackmin en Mayo 27, 2012, 03:05:32 pm
Esta muy bien pero es mas detallado poner las ventajas de cada lenguaje etc etc...
Pero lo vuelvo a repetir esta bastante bien..

Hay algo que no estoy de acuerdo con ravenheart , todo lenguaje es bueno y por que no lo utilice mucha gente o no sea moderno no quiere decir que sea malo.


Yo pensaba igual/parecido a ravenheart pero me di cuenta que si se sabe utilizar un lenguaje CASI TODO puedes hacer con el...


De hecho hace cosa de 1 mes  estaba en un proyecto del nod32 para activar claves en el automaticamente de hecho lo conseguí lo hice en autoIT y vb.net 2010 y AutoIT me facilito mucho esa tarea ya que es 100% eventos de Windows y lo mejor de todo es que INCLUYE TODAS LAS APIS.

En resumen: Lo utilizan poca gente, pero es buenísimo para esos tipos de tareas.
Saludos ;)
Título: Re:Catálogo de lenguajes de programación
Publicado por: ravenheart en Mayo 28, 2012, 09:14:37 pm
No se trata de hacer cosas oscuras, se trata de orientar a los novatos que quieren empezar. Y para eso, es mejor un lenguaje muy utilizado del que puedan encontrar ejemplos y documentación.

No todo lenguaje es bueno. Casi todos tienen su nicho, pero por ejemplo, aprender VB6 a día de hoy es una tontería si no tienes un montón de código antiguo que quieres aprovechar. PHP está bien porque hay montones de empresas quete dan hosting gratuito y viene instalado con cualquier linux moderno (o se instala con un comando), pero como lenguaje, es horrible, y la gestión de proyectos grandes es un infierno. De Fortran y Cobol mejor no hablar. Por otra parte, si intentas aprender a programar con un lenguaje del que no hay literatura y cuando tienes una duda no hay quien te la pueda resolver, tienes un problema.

por que no lo utilice mucha gente o no sea moderno no quiere decir que sea malo.
Yo no he dicho eso.

Citar
si se sabe utilizar un lenguaje CASI TODO puedes hacer con el...
Yo aún digo más, si se sabe utilizar un lenguaje Turing-completo, puedes hacer exactamente lo mismo que con cualquier otro. ¡Figúrate!
Título: Re:Catálogo de lenguajes de programación
Publicado por: kenkeiras en Julio 26, 2012, 07:08:48 pm
Pues sin ánimo de echar por tierra la labor de Kenkeiras, yo no veo de qué le va a servir esto a un novato que esté intentando decidirse por un lenguaje; en todo caso le confundirá aún más.

Si se trata de orientar a los novatos, yo me limitaría a un puñado de lenguajes populares y modernos, quizá Asm, Bash, Batch, C, C++, C#, Java, Perl, PHP, Python, Vb.Net, y si queremos sentirnos halternatibos Haskell, Lua, Prolog, Scheme y Ruby (En serio, ¿Fortran? ¿Logo? ¿Basic? WTF?). En fin, cosas modernas o que al menos se usen en la actualidad, de las que se pueda encontrar mucha documentación...
Puede ser, no lo había pensado, pero no todo el mundo quiere usar un lenguaje de programación para escribir programas (me explico), hay quien quiere una calculadora grande, en ese caso los primeros que mencionas no son los más prácticos, Fortran supongo que puede resultar útil para quien busca más velocidad en el cálculo numérico, Logo se utilizó bastante tiempo como lenguaje educativo, etc...

Además, más útil que poner tres o cuatro mini ejemplos de código (que no digo que esté mal) y una descripción que parece sacada de la Wikipedia, sería explicar lo que se puede esperar de cada lenguaje, sus ventajas e inconvenientes.
En parte he intentado eso, pero hay 2 obstáculos:
 1- Que no me los conozco a todos al dedillo, así que no puedo hacerlo sin que se escape alguna barbaridad, dicho esto si a alguien le interesa aportar alguna explicación más elaborada estaré sinceramente agradecido :)
 2- Pretendía ser una descripción corta para no saturar al usuario, siempre hay otras fuentes que pueden aportar esa información

En otro orden de cosas, no sé por que no están C++ (que no es lo mismo que C por mucho que la gente tenga la manía de ponerlos juntos, como si fueran lo mismo) ni Visual Basic, ni Visual Basic.Net (que ni son el mismo lenguaje, ni se parecen al Basic original, que por cierto, ya nadie usa).
Cierto, la idea era mantenerlos así y desdoblarlos cuando fuera el ejemplo con los tipos, al final la cosa se retrasó y ..., pero en ese código poca diferencia habría entre lo propio de C y C++ ('printf' vs 'cout << ... ' ? ), y ese es correcto en ambos.

En fin, gracias a todos por el apoyo y a ravenheart por la crítica, que no es bueno verlo siempre desde los ojos de uno :)
Título: Re:Catálogo de lenguajes de programación
Publicado por: dreams_eater en Julio 28, 2012, 03:43:09 am
Para terminar la discusión de nunca acabar, lo que se podría agregar al catálogo de lenguajes de programación:
, es categorizar al lenguaje:
*Si se usaría laboralmente (es decir crear un proyecto nuevo HOY), eso encaja con java, php, pero no Pascal-FC
*Si solo es un lenguaje educativo, eso encaja con Pascal-FC, haskell, pero no brainFuck
*Si es un lenguaje para researching y calculo, eso encajaria con Fortran90 y C/C++, pero no php.
*Si es un lenguaje historico y su contribucion: sin contribucion, no es historico, sino uno copión más.
* Lenguaje tipo Glu eso encajaria con bash, python pero no ensamblador

Saludos!
PD: Pascal-FC fue creado (por Alan Burns) para enseñar programación concurrente o repasar el tema, para sacarle jugo tenes que leer el libro del autor sobre programación paralela y otro especificaciones de como hacer tu propio compilador de Pascal-FC y se ejecuta con una "maquina virtual" (hasta el momento conosco de la existencia de compilador de Alan Burns y otro de John Coppens,).
Título: Re:Catálogo de lenguajes de programación
Publicado por: kenkeiras en Septiembre 10, 2012, 11:25:13 pm
Para terminar la discusión de nunca acabar, lo que se podría agregar al catálogo de lenguajes de programación:
, es categorizar al lenguaje:
*Si se usaría laboralmente (es decir crear un proyecto nuevo HOY), eso encaja con java, php, pero no Pascal-FC
*Si solo es un lenguaje educativo, eso encaja con Pascal-FC, haskell, pero no brainFuck
*Si es un lenguaje para researching y calculo, eso encajaria con Fortran90 y C/C++, pero no php.
*Si es un lenguaje historico y su contribucion: sin contribucion, no es historico, sino uno copión más.
* Lenguaje tipo Glu eso encajaria con bash, python pero no ensamblador
Tienes razón, pero esa clasificación puede ser muy relativa, por ejemplo, por aquí se usa pascal como lenguaje para aprender, pero también fue en el que se implementó TeX, y se puede usar como RAD con Lazarus.
Título: Re:Catálogo de lenguajes de programación
Publicado por: Deimos en Septiembre 11, 2012, 01:09:02 am
Aprovechando que estais con este hilo,acabo de empezar un curso de Visual Studio que incluye:

Visual Basic.NET, ASP.NET y C#

Por lo que leo en estos post no son apropiados para principiantes ¿o si?.....La verdad que me esta costando un Hue.... ya que no son presenciales son en plataforma e-learnig... :'(

Saludos a [email protected]

Título: Re:Catálogo de lenguajes de programación
Publicado por: hacker fashion en Septiembre 11, 2012, 02:59:52 am
Vaya hay algunos que no conosco, creeo que me hace falta estudiar mas! =(
Título: Re:Catálogo de lenguajes de programación
Publicado por: hackman en Noviembre 25, 2012, 11:54:44 pm
Muy buen aporte!!
Excelente para que te des una idea de a que va orientado cada lenguaje
gracias men!!
Título: Re:Catálogo de lenguajes de programación
Publicado por: storm en Diciembre 27, 2012, 05:03:23 pm
Falta C++  :'( Pero igualmente buena recopilación! Ah por cierto, que yo sepa C y C++ son también muy buenos para crear videojuegos. Gran aporte  :) Gracias!
Título: Re:Catálogo de lenguajes de programación
Publicado por: inericrack en Enero 31, 2013, 05:52:43 pm
Que lenguaje hay que aprender primero es que yo eh empezado por PHP,PYTHON
? cual es el principal ?
Título: Re:Catálogo de lenguajes de programación
Publicado por: Neutron en Enero 31, 2013, 06:12:28 pm
Que lenguaje hay que aprender primero es que yo eh empezado por PHP,PYTHON
? cual es el principal ?
Mira como puedes ver este post se creo con la finalidad de que no sea necesario preguntar "Que lenguaje aprender primero?" o algo asi, no hiciste un lenguaje tal cual que debas aprender primero, ahora eso si, lo que es recomendable aprender primero es algo de logica de programacion (http://es.scribd.com/doc/50890625/La-Esencia-de-La-Logica). Pero el lenguaje a apreder primero queda de parte tuya, es decir, depende de que quieras hacer con ese lenguaje, hay gente que solo sabe python o assembler o C, por cuestion de que eran lo que necesitaban, asi que elije un lenguaje conforme a tus necesidades y gusto. Pero ya que has iniciado con esos dos que has dicho, en mi opinion perfeciona tus conocimientos en esos.
Título: Re:Catálogo de lenguajes de programación
Publicado por: PurpleHaze en Febrero 13, 2013, 11:05:33 pm
Una Pregunta Sobre El Visual Basic..
Donde es Donde Lo Estas Programando En el load ?
Título: Re:Catálogo de lenguajes de programación
Publicado por: INARENVI en Febrero 14, 2013, 11:35:23 am
Te recomendaria que en haskell/syntax.hs lo mejorases, de esta forma. Ya que puede dar confucion a que existen variables, y que return, retorna. Aun asi bastante bien el catalogo(falta F# que esta bastante interesante)

Código: [Seleccionar]
import Control.Monad

type MyType = [String] -- simplente MyType equivale a [String] no crea un nuevo tipo simplemente le da otro nombre

-- un documento podría ser una revista, o un libro
data Documentos = Revistas String Int -- nombre, número
                                | Libro   String     -- nombre
                                deriving (Eq, Show) -- se deriva de las clases(Eq (permite usar (==) (/=))y show(lo pasa a string))
-- Tipos de datos principales(se pueden crear mas tipos a partir data)
-- En haskell no es necesario poner a :: Int, pero algunas situaciones lo requieren. En estas no, pero no pasa nada

a :: Int
a = 1
-- No hay variables en haskell (No se puede hacer a+=1)
b :: Bool
b = True
b :: [Char] -- [Char] es equivalente String
c = "Hola :P"

main :: IO ()
main = do
  x <- getContent -- obtiene una linea
  putStrLn x         -- imprime una linea
  return () -- no es igual a un return de los lenguajes imperativos, introduce el valor en un tipo en este caso IO ()

haskell/branching.hs Y este otro cambialo, que este es mas legible.

Código: [Seleccionar]
-- Función
fizzbuzz :: (Eq, Ord) => Int -> String
fizzbuzz numero =
             | (mod numero 3 > 0) && (mod numero 5 > 0)      = show numero
             | (mod numero 3 == 0) && (mod numero 5 == 0) = "FizzBuzz"
             | mod numero 3 == 0                                             = "Fizz"
             | otherwise                                                              = "Buzz"

main = do
    mapM_ (putStrLn . fizzbuzz) [1..100] -- si no te gusta mapM_ usar forM (lo mismo pero coge los argumentos alrevez)
pd: la indentacion perece hacer lo que la gana
Título: Re:Catálogo de lenguajes de programación
Publicado por: kenkeiras en Febrero 28, 2013, 07:57:02 pm
Te recomendaria que en haskell/syntax.hs lo mejorases, de esta forma. Ya que puede dar confucion a que existen variables, y que return, retorna. Aun asi bastante bien el catalogo(falta F# que esta bastante interesante)

Código: [Seleccionar]
import Control.Monad

type MyType = [String] -- simplente MyType equivale a [String] no crea un nuevo tipo simplemente le da otro nombre

-- un documento podría ser una revista, o un libro
data Documentos = Revistas String Int -- nombre, número
                                | Libro   String     -- nombre
                                deriving (Eq, Show) -- se deriva de las clases(Eq (permite usar (==) (/=))y show(lo pasa a string))
-- Tipos de datos principales(se pueden crear mas tipos a partir data)
-- En haskell no es necesario poner a :: Int, pero algunas situaciones lo requieren. En estas no, pero no pasa nada

a :: Int
a = 1
-- No hay variables en haskell (No se puede hacer a+=1)
b :: Bool
b = True
b :: [Char] -- [Char] es equivalente String
c = "Hola :P"

main :: IO ()
main = do
  x <- getContent -- obtiene una linea
  putStrLn x         -- imprime una linea
  return () -- no es igual a un return de los lenguajes imperativos, introduce el valor en un tipo en este caso IO ()

haskell/branching.hs Y este otro cambialo, que este es mas legible.

Código: [Seleccionar]
-- Función
fizzbuzz :: (Eq, Ord) => Int -> String
fizzbuzz numero =
             | (mod numero 3 > 0) && (mod numero 5 > 0)      = show numero
             | (mod numero 3 == 0) && (mod numero 5 == 0) = "FizzBuzz"
             | mod numero 3 == 0                                             = "Fizz"
             | otherwise                                                              = "Buzz"

main = do
    mapM_ (putStrLn . fizzbuzz) [1..100] -- si no te gusta mapM_ usar forM (lo mismo pero coge los argumentos alrevez)
pd: la indentacion perece hacer lo que la gana

Actualizado, muchas gracias :D

ps: he tenido que cambiar la clase de la función fizzbuzz por que no funcionaba, si encuentras el por que, por favor, avisa ^^
Título: Re:Catálogo de lenguajes de programación
Publicado por: INARENVI en Marzo 01, 2013, 02:47:51 pm
Ups, cometi un error muy bobo. ;D

Código: [Seleccionar]
fizzbuzz :: (Eq, Ord) => Int -> String
fizzbuzz numero     -- here, si se usan guardas(|) no se pone el igual
             | (mod numero 3 > 0) && (mod numero 5 > 0) = show numero
             | (mod numero 3 == 0) && (mod numero 5 == 0) = "FizzBuzz"
             | mod numero 3 == 0 = "Fizz"
             | otherwise = "Buzz"
Título: Re:Catálogo de lenguajes de programación
Publicado por: stakewinner00 en Marzo 01, 2013, 07:21:31 pm
Muy bueno.
Título: Re:Catálogo de lenguajes de programación
Publicado por: j053c4 en Marzo 02, 2013, 01:49:24 am
 buen aporte.. gracias