Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is C# a functional programmming language?

It has been said that C# can be regarded as a functional programming language, even though it is widely recognized as a OO programming language.

So, what feature set makes C# a functional programming language?

I can only think of:

  1. delegates (even without anonymous methods and lambda expressions)
  2. closures

Anything else?

like image 715
Morgan Cheng Avatar asked Dec 26 '08 13:12

Morgan Cheng


People also ask

Why is C named so?

Because a and b and c , so it's name is C. C came out of Ken Thompson's Unix project at AT&T. He originally wrote Unix in assembly language. He wrote a language in assembly called B that ran on Unix, and was a subset of an existing language called BCPL.

Why is C not A or B?

Because C comes after B The reason why the language was named “C” by its creator was that it came after B language. Back then, Bell Labs already had a programming language called “B” at their disposal.

Why is C such an important language?

Being a middle-level language, C reduces the gap between the low-level and high-level languages. It can be used for writing operating systems as well as doing application level programming. Helps to understand the fundamentals of Computer Theories.


1 Answers

C# has borrowed a lot of features from ML and Haskell for example:

  • C# 2.0 brought us parametric polymorphism (or "generics"). I've heard that Dom Syme, one of the creators of F#, was largely responsible for implementing generics in the .NET BCL.

  • C# 2.0 also allows programmers to pass and returns functions as values for higher-order functions, and has limited support for anonymous delegates.

  • C# 3.0 and 3.5 improved support anonymous functions for true closures.

  • LINQ can be considered C#'s own flavor of list comprehensions.

  • Anonymous types look like an approximation of ML records

  • Type-inference is a given.

  • I don't know about you, but C# extension methods look an awful lot like Haskell type classes.

  • There's been a lot of talk about the "dynamic" keyword in C# 4.0. I'm not 100% sure of its implementation details, but I'm fairly sure its going to use structural typing rather than late binding to retain C#'s compile time safety. Structural typing is roughly equivalent to "duck typing for static languages", its a feature that Haskell and ML hackers have been enjoying for years.

This isn't to say that C# is a functional programming language. Its still missing important features such as pattern matching, tail-call optimization, and list and tuple literals. Additionally, idiomatic C# is fundamentally imperative with a heavy dependence on mutable state.

I wouldn't necessarily consider some of those features mentioned above as exclusive to functional programming languages, but its pretty clear that the C# developers have taken a lot of inspiration from functional programming languages in the past few years.

like image 109
Juliet Avatar answered Oct 06 '22 01:10

Juliet