Articles of functional programming

Inferindo tipos genéricos com composição funcional

Suponha que eu queira implementar uma composição funcional, como esta: public Func Compose(Func f, Func g) { return new Func( x => f(g(x))); } Agora, na prática, eu posso usar este Compose () fn assim: public String ToUpper(String s) { return s.ToUpper(); } public String Replicate(String s) { return s+s; } public void Run() { […]

Funcionalmente atravessando uma tree em c #

Considere o seguinte método de extensão em c #, Traverse: IEnumerable Traverse( this IEnumerable source, Func<T, IEnumerable> fnRecurse ); Este método permite recorrer a uma tree conforme definido por T e qualquer function que faz com que T retorne seus subnós. Agora considere a seguinte implementação de T: class Node { public string Name; public […]

C # foreach vs funcional cada

Qual destes você prefere? foreach(var zombie in zombies) { zombie.ShuffleTowardsSurvivors(); zombie.EatNearbyBrains(); } ou zombies.Each(zombie => { zombie.ShuffleTowardsSurvivors(); zombie.EatNearbyBrains(); });

Em que áreas o F # faz “absolutamente nenhum sentido em usar”?

Don Syme, em sua palestra no SPLASH, diz que o F # não pretende ser um substituto do C #, apesar de ter as capacidades gerais. Ele prossegue dizendo que há áreas em que o F # não faz sentido no uso, mas não expande a tese. Alguém pode me dizer quais áreas devem ser […]

Qual é a maneira mais simples de acessar dados de um tipo de união discriminada em F # em C #?

Eu estou tentando entender o quão bem C # e F # podem jogar juntos. Eu peguei um código do blog F # for Fun & Profit que realiza a validação básica retornando um tipo discriminado de união: type Result = | Success of ‘TSuccess | Failure of ‘TFailure type Request = {name:string; email:string} let […]

Mapa genérico / reduzir as extensões de lista em c #

Estou escrevendo algumas extensões para imitar o mapa e reduzir funções no Lisp. public delegate R ReduceFunction(T t, R previous); public delegate void TransformFunction(T t, params object[] args); public static R Reduce(this List list, ReduceFunction r, R initial) { var aggregate = initial; foreach(var t in list) aggregate = r(t,aggregate); return aggregate; } public static […]

Coolest C # LINQ / Lambdas truque que você já puxou?

Vi um post sobre os resources ocultos em C #, mas muitas pessoas não escreveram o exemplo de linq / lambdas então … eu me pergunto … Qual é o uso mais legal (como no mais elegante) dos representantes C # LINQ e / ou Lambdas / anônimos que você já viu / escreveu? Bônus […]

Por que o Funcs não aceita mais de 16 argumentos?

Como o Javascript é a língua em que eu sou mais proficiente, estou familiarizado com o uso de funções como objects de primeira class. Eu tinha pensado que faltava esse recurso para o C #, mas então ouvi falar do Func and Action e delegate , o que acho que é bastante impressionante. Por exemplo, […]

Já implementei o Y-combinator usando a dinâmica C # e, se não tiver, o que é?

Meu cérebro parece estar no modo masoquista, então depois de ser afogado nisso , isso e isso , ele queria mexer com algum DIY em C #. Eu criei o seguinte, que eu não acho que seja o Y-combinator, mas ele parece conseguir fazer uma function não-recursiva recursiva, sem se referir a si mesma: Func<Func, […]

Existe idiomático C # equivalente ao operador de vírgula de C?

Eu estou usando algumas coisas funcionais em c # e ficar preso no fato de que List.Add não retorna a lista atualizada. Em geral, gostaria de chamar uma function em um object e, em seguida, retornar o object atualizado. Por exemplo, seria ótimo se C # tivesse um operador de vírgula: ((accum, data) => accum.Add(data), […]