diff options
| -rw-r--r-- | es-es/perl-es.html.markdown | 157 | ||||
| -rw-r--r-- | haskell.html.markdown | 2 | ||||
| -rw-r--r-- | tr-tr/brainfuck-tr.html.markdown | 86 | 
3 files changed, 244 insertions, 1 deletions
| diff --git a/es-es/perl-es.html.markdown b/es-es/perl-es.html.markdown new file mode 100644 index 00000000..b1327997 --- /dev/null +++ b/es-es/perl-es.html.markdown @@ -0,0 +1,157 @@ +--- +name: perl +category: language +language: perl +filename: learnperl-es.pl +contributors: +    - ["Francisco Gomez", "http://github.com/frncscgmz"] +--- + +Perl 5 es un lenguaje de programación altamente capaz, rico en características con mas de 25 años de desarrollo. + +Perl 5 corre en mas de 100 plataformas desde portales hasta mainframes y es adecuado para realizar prototipos rápidos hasta desarrollar proyectos a gran escala. + +```perl +# Comentarios de una sola linea con un carácter hash. + +#### Tipos de variables en Perl + +# Las variables comienzan con el símbolo $. +# Un nombre de variable valido empieza con una letra o un guión bajo, +# seguido por cualquier numero de letras, números o guiones bajos. + +### Perl tiene tres tipos principales de variables: escalares, arreglos y hashes. + +## Escalares +# Un escalar representa un solo valor: +my $animal    = "camello"; +my $respuesta = 42; + +# Los valores escalares pueden ser cadenas de caracteres, números enteros o  +# de punto flotante, Perl automáticamente los convertirá como sea requerido. + +## Arreglos +# Un arreglo representa una lista de valores: +my @animales = {"camello","llama","buho"}; +my @numeros  = {23,42,69}; +my @mixto    = {"camello",42,1.23}; + + + +## Hashes +#   Un hash representa un conjunto de pares llave/valor: + +my %color_fruta = {"manzana","rojo","banana","amarillo"}; + +#  Puedes usar un espacio en blanco y el operador "=>" para asignarlos mas +#  fácilmente. + +my %color_fruta = ( +   manzana => "rojo", +   banana  => "amarillo", +   ); +# Los escalares, arreglos y hashes están mas documentados en perldata. (perldoc perldata). + +# Los tipos de datos mas complejos pueden ser construidos utilizando  +# referencias, las cuales te permiten construir listas y hashes dentro  +# de listas y hashes. + +#### Estructuras condicionales y de ciclos + +# Perl tiene la mayoría de las estructuras condicionales y de ciclos mas comunes. + +if ( $var ) { +     ... +} elsif ( $var eq 'bar' ) {  +     ... +} else { +     ... +} + +unless ( condicion ) { +                  ... +              } +# Esto es proporcionado como una version mas fácil de leer que "if (!condición)" + +# La post condición al modo Perl +print "Yow!" if $zippy; +print "No tenemos bananas" unless $bananas; + +# while +  while ( condicion ) { +                  ... +               } + + +# for y foreach +for ($i = 0; $i <= $max; $i++) { +                  ... +               } + +foreach (@array) { +                   print "Este elemento es $_\n"; +               } + + +#### Expresiones regulares + +# El soporte de expresiones regulares en Perl es muy amplio y profundo, y es  +# sujeto a una extensa documentación en perlrequick, perlretut, entre otros. +# Sin embargo, resumiendo: + +# Pareo simple +if (/foo/)       { ... }  # verdadero si $_ contiene "foo" +if ($a =~ /foo/) { ... }  # verdadero si $a contiene "foo" + +# Substitución simple +$a =~ s/foo/bar/;         # remplaza foo con bar en $a +$a =~ s/foo/bar/g;        # remplaza TODAS LAS INSTANCIAS de foo con bar en $a + + +#### Archivos e I/O + +# Puedes abrir un archivo para obtener datos o escribirlos utilizando la  +# función "open()". + +open(my $entrada, "<"  "entrada.txt") or die "No es posible abrir entrada.txt: $!"; +open(my $salida,  ">", "salida.txt")  or die "No es posible abrir salida.txt: $!"; +open(my $log,     ">>", "mi.log")     or die "No es posible abrir mi.log: $!"; + +# Es posible leer desde un gestor de archivo abierto utilizando el operador "<>"  +# operador. En contexto escalar leer una sola linea desde el gestor de  +# archivo, y en contexto de lista leer el archivo completo en donde, asigna  +# cada linea a un elemento de la lista. + +my $linea  = <$entrada>; +my @lineas = <$entrada>; + +#### Escribiendo subrutinas + +# Escribir subrutinas es fácil: + +sub logger { +   my $mensajelog = shift; +   open my $archivolog, ">>", "mi.log" or die "No es posible abrir mi.log: $!"; +   print $archivolog $mensajelog; +} + +# Ahora podemos utilizar la subrutina al igual que cualquier otra función  +# incorporada: + +logger("Tenemos una subrutina logger!"); + + +``` + +#### Utilizando módulos Perl + +Los módulos en Perl proveen una gama de funciones que te pueden ayudar a evitar reinventar la rueda, estas pueden ser descargadas desde CPAN( http://www.cpan.org/ ). Algunos de los módulos mas populares ya están incluidos con la misma distribución de Perl.  + +perlfaq contiene preguntas y respuestas relacionadas con muchas tareas comunes, y algunas veces provee sugerencias sobre buenos módulos CPAN para usar. + +#### Material de Lectura + +     - [perl-tutorial](http://perl-tutorial.org/) +     - [Aprende en www.perl.com](http://www.perl.org/learn.html) +     - [perldoc](http://perldoc.perl.org/) +     - y perl incorporado: `perldoc perlintro` diff --git a/haskell.html.markdown b/haskell.html.markdown index e3ec3f38..6b3c6e17 100644 --- a/haskell.html.markdown +++ b/haskell.html.markdown @@ -329,7 +329,7 @@ main' = interact countLines  sayHello :: IO ()  sayHello = do      putStrLn "What is your name?" -   name <- getLine -- this gets a line and gives it the name "input" +   name <- getLine -- this gets a line and gives it the name "name"     putStrLn $ "Hello, " ++ name  -- Exercise: write your own version of `interact` that only reads diff --git a/tr-tr/brainfuck-tr.html.markdown b/tr-tr/brainfuck-tr.html.markdown new file mode 100644 index 00000000..a6f6f078 --- /dev/null +++ b/tr-tr/brainfuck-tr.html.markdown @@ -0,0 +1,86 @@ +--- +language: brainfuck +filename: brainfuck-tr +contributors: +    - ["Prajit Ramachandran", "http://prajitr.github.io"] +translators: +    - ["Haydar KULEKCI", "http://scanf.info/"] +lang: tr-tr +--- + +Brainfuck son derece minimal bir programlama dilidir. (Sadece 8 komut) ve  +tamamen Turing'dir. + +``` +"><+-.,[]" (tırnak işaretleri hariç) karakterleri dışındaki her karakter  +gözardı edilir. + +Brainfuck is represented by an array with 30,000 cells initialized to zero +and a data pointer pointing at the current cell. + +There are eight commands: ++ : Geçerli hücrenin değerini bir artırır. +- : Geçerli hücrenin değerini bir azaltır. +> : Veri işaretçisini bir sonraki hücreye hareket ettirir(sağdaki hücreye). +< : Veri işaretçisini bir önceki hücreye hareket ettirir(soldaki hücreye). +. : Geçerli hücrenin ASCII değerini yazdırır (örn: 65 = 'A'). +, : Bir girdilik karakteri aktif hücre için okur. +[ : Eğer geçerli hücredeki değer sıfır ise, ]ifadesine atlar.  +    Diğer durumlarda bir sonraki yönergeye geçer. +] : Eğer geçerli hücredeki değer sıfır ise, bir sonraki yönergeye geçer.  +    Diğer durumlarda, [ ifadesine karşılık gelen yönergelere döner. + +[ ve ] bir while döngüsü oluşturur. Açıkça, dengeli olmalıdırlar. + +Basit bir Brainfuck programına göz atalım.  + +++++++ [ > ++++++++++ < - ] > +++++ . + +Bu program 'A' karaterini ekrana basar. İlk olarak, #1'inci hücre 6'ya artırılır. +#1'inci hücre döngü için kullanılacaktır. Sonra, ([) döngüsüne girilir ve  +#2'inci hücreye hareket edilir. #2'inci hücre 10 kez artırılır, #1'inci hücreye  +geri dönülür. #1 hücresini bir azaltır. Bu döngü 6 kez gerçekleşir. (Bu 6 kez  +azaltmak demektir, #1 hücresi 0 değerini alır ve bu noktada ] ifadesini atlar). + +Bu noktada, biz #1 hücresindeyiz, değeri şu anda 0 ve #2 hücresinin değeri  +60'tır. Biz #2 hücresine hareket diyoruz ve bu hücreyi 5 defa artırıyoruz. +#2'nin şu anki değeri 65 olur. Sonra #2 hücresinin ASCII karşılığını  +yazdırıyoruz. 65 değerinin ASCII karşılığı 'A'dır. Ekrana 'A' yazılacaktır.  + + +, [ > + < - ] > . + +Bu program kullanıcıdan bir girdi okur, ve karakteri bir diğer hücreye yazdırır, +ve daha sonra aynı karakteri ekrana yazdırır. + +, ifadesi kullanıcıdan karakteri #1 hücresine okur. Sonra bir döngü  +başlar. #2 hücresine hareket edilir, #2 hücresinin değeri bir artırılır, #1  +hücresine geri dönülür, ve #1 hücresinin değer bir azaltılır. Bu #1 hücresinin +değeri 0 olana kadar devam eder ve #2 hücresi #1'in eski değerini tutar. Çünkü  +biz #1 hücresindeki verileri döngü süresince #2 hücresine taşıyoruz, ve sonunda +#2 hücresinin ASCII değerini yazdırıyoruz. + +Boşluk karakteri sadece okunabilirliği artırmak içindir. Aşağıdaki gibi de  +yazabilirsiniz. + +,[>+<-]>. + + +Bu uygulamanın ne yaptığına bakalım: + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>   + +Bu program 2 sayı alır, ve birbiri ile çarpar. + +Özetle, ilk olarak iki girdi alır. Sonra, #1 hücresinde şarta bağlı harici bir  +döngü başlar. Sonra #2 ye hareket edilir, ve içerde #2 hücresine bağlı bir döngü +daha başlar ve #3 hücresinin değerini artırır. Ama, Bir problem vardır: iç  +döngünün sonunda #2'inci hücrenin değeri 0 olacaktır. Bunu çözmek için #4  +hücresinin de değerini yükseltiyoruz, ve sonra #4 hücresinin değerini #2'ye  +kopyalıyoruz. +``` + +İşte Brainfuck. Zor değil değil mi? Eğlenmek için kendi programınızı  +yazabilirsiniz, veya farklı bir dilde Brainfuck yorumlayıcısı yazabilirsiniz. +Yorumlayıcı oldukça basittir, ama mazoşist iseniz, Brainfuck içerisinde bir  +Brainfuck yorumlayıcısı yazmayı deneyebilirsiniz. | 
