Sie sind auf Seite 1von 23

Ctcas de la Programacin Funcional

La mayora de los datos son inmutables (NO efectos colaterales). Las funciones toman categora de 1er nivel. Facilidades sintcticas para definir y componer funciones Las funciones pueden ser tratadas como datos. Tipado esttico pero grandes facilidades de inferencia de tipo por el compilador siempre que sea posible Construcciones sintcticas directas para expresar tipos de datos como listas, secuencias, etc, y operadores sobre esos tipos. Buenos recursos de Pattern matching

de funcionales en C# LINQ

Se le pasa una funcin que se usa como condicin

Se le pasa una funcin que se usa para "transformar el resultado

Notacin para expresar directamente funciones

ogramacin Funcional en C#
Tratar las funciones como datos Delegados, Expresiones Lambda (con clausura). Inferencia de tipos al declarar una variable con el indicador var . Sin embargo lamentablemente no se puede declarar que un mtodo devuelva var . Expresiones Lambda analizables como datos si se asignan a una variable de tipo Expression Falta de mejores notaciones sintcticas para expresar estructuras bsicas como listas, iteradores, etc.

F#
Satisface las ctcas funcionales anteriores. Construcciones sintcticas propias para expresar operadores funcionales y para expresar estructuras bsicas como listas, colecciones, tuplos, iteradores. No en un mundo aislado sino integrado en el framework de .NET y conviviendo con el paradigma OO y todas la jerarqua de tipos y biblioteca de clases de .NET

Listas
Son de las construcciones ms utilizadas e importantes

Se forman in memory

as operaciones sobre listas

Secuencias

let numeros = seq {1..5}

numeros |> Seq.iter (printfn "%d") escribe 1 2 3 4 5

Son producidas lazy

Secuencias
Pueden formarse con yield

Como tipo del .NET Framework son IEnumerable<T>

Tuplos
Forma una secuencia de duplos Forma un duplo

Forma un triplo

Recibe un duplo

Recorre una secuencia de triplos Recibe un triplo

Recursion

Indicador de recursin quiere decir que el nombre puede usarse aunque no haya terminado la asignacin

perador Pipeline |>


let (|>) x f = f x Es lo mismo escribir f x que x |> f

Se puede escribir como

Una notacin ms objetual, lamentablemente no comparable a la ayuda del Intellisense

erador Pipeline |>

El compilador NO puede inferir que el tipo texto

El compilador infiere el tipo de s

De esta forma no lo infiere, hay que ponrselo

dor Composicin de funciones >>

let (>>) f g x = g(f(x)) es lo mismo hacer f>>g x que g(f(x))

Se construye una nueva funcin componiendo dos

nciones parciales

s parciales. Haciendo wrapper a funci


Se basa en el carcter lazy de esta evaluacin

Vamos a medirle el tiempo a estas tres funciones

CP
Implemente esta idea del patrn Measure en C#

emoize Pattern

Patrn MEMOIZE, cmo memorizar el clculo ya hecho para no repetirlo?


Recibe una funcin de T en R Tiene internamente un diccionario para memorizar y no repetir un clculo para el mismo parmetro El diccionario devuelve una dupla Devuelve una funcin de T en R con la capacidad de memorizar

emoize Pattern
Ms composicin de funciones y funciones parciales

ttern Matching

Las variables asumen el valor de la parte ttern Matching que no se fuerza al match

Wild card, matchea con cualquier cosa

Matchea con la segunda linea Matchea con la quinta linea

No Matchea da excepcin Wrong Date

ctive Pattern

Un esquema tradicional. Ir aplicando varios mtodos a un mismo parmetro e ir preguntando

ctive Pattern
Se devuelve una suerte de patrn que puede usarse en un match

Matchean con el resultado

Das könnte Ihnen auch gefallen