martes, diciembre 11, 2007

Comenzando con F#

Si todo sale de acuerdo a lo planeado haré mi práctica trabajando en un "nuevo" lenguaje de Microsoft llamado F#. Éstas últimas semanas estuve viendo diferentes alternativas para ver donde iba a comenzar a cacharrear con el lenguaje entonces me tope con las siguientes opciones:

1. Partición Windows con Visual Estudio
2. Mono
3. Windows Virtualizado

Después de mucha pereza de instalar Windows decidí optar por instalarlo con Mono. La primera vez que lo intenté me sacaba un error con unas dlls entonces dije "Porque no virtualizo un windows y trabajo ahí? la verdad solo necesito el compilador y hago copy paste del código que escriba con mi hermoso emacs". El resultado fue ésto:



Visual estudio corriendo en un Windows virtualizado sobre KVM.

Pero lo que parecía una fantasía taaan prometedora falló en algo bien básico.

* No es posible hacer copy-paste (además no es tan cómodo como lo imaginé).

* La eficiencia se va pal carajo. La sola instalada de VS me tomó alrededor de 4 horas

* Si le hace a uno a veces falta espacio para ver el código por el montón de bobadas abiertas, Visual Estudio no colabora (en la imagen se ve)


Entonces dije "volvaaamos a intentar con mono". El asunto resulto ser mas simple de lo que pensé, para que me corriera bien solo hacía falta instalar las librerías faltantes lo cual con aptitude es muy muy fácil.

Una vez instalado hice lo primero que uno debe hacer

diegoeche@Multivac:~/Desktop/FSharp-1.9.2.9/workspace$ cat Hello.fs
printf "Hola FSharp!\n"
diegoeche@Multivac:~/Desktop/FSharp-1.9.2.9/workspace$ mono ../bin/fsc.exe Hello.fs
diegoeche@Multivac:~/Desktop/FSharp-1.9.2.9/workspace$ mono Hello.exe
Hola FSharp!


No hay monadas. Todo es simple y lleno de side-effects :P. Es decir F# no es un lenguaje puramente funcional lo que permite llamar funciones de entrada salida donde uno quiera.

Pues bien, no me podía quedar ahí y tenia que hacer algo para sentirme programando realmente en forma funcional. Entonces arregle el .emacs para trabajar con un modo para Caml llamado Tuareg porque la sintaxis de F# y Caml tiene algo de similar. Ya con un ambiente de desarrollo DE VERDAD (emacs y un compilador, que mas necesita un hombre de verdad? :P) éste fue el resultado:

open List

let rec fib x =
match x with
| 1 -> 1
| 2 -> 1
| n -> (fib (n-1)) + (fib (n-2))

let rec size x =
match x with
| [] -> 0
| x::xs -> 1 + size xs

do print_any(map (fun x -> 2 * x) [1..10])
do System.Console.WriteLine(size [1..10])


Pattern matching Recursividad, map, y una función anónima son cosas para querer empezar a trabajar ya!

:D

No hay comentarios.: